@cryptotaxi247 / netdata-1 / commits / 21462af83

Handle coverity issues related to Y2K38_SAFETY (#16583)

* Switch update_every_s to uint32_t Fix coverity issues related to Y2K38_SAFETY * Fix CI

Stelios Fragkakis committed Dec 12, 2023 at 16:28 UTC 21462af834abcdf136c53d21379e74b2c7306839
10 files changed +65 -69
database/engine/cache.c
+3 -3
@@ -1949,13 +1949,13 @@ time_t pgc_page_end_time_s(PGC_PAGE *page) {
1949 return page->end_time_s;
1950 }
1951
1952 -time_t pgc_page_update_every_s(PGC_PAGE *page) {
1952 +uint32_t pgc_page_update_every_s(PGC_PAGE *page) {
1953 return page->update_every_s;
1954 }
1955
1956 -time_t pgc_page_fix_update_every(PGC_PAGE *page, time_t update_every_s) {
1956 +uint32_t pgc_page_fix_update_every(PGC_PAGE *page, uint32_t update_every_s) {
1957 if(page->update_every_s == 0)
1958 - page->update_every_s = (uint32_t) update_every_s;
1958 + page->update_every_s = update_every_s;
1959
1960 return page->update_every_s;
1961 }
database/engine/cache.h
+3 -3
@@ -27,7 +27,7 @@ typedef struct pgc_entry {
27 time_t end_time_s; // the end time of the page
28 size_t size; // the size in bytes of the allocation, outside the cache
29 void *data; // a pointer to data outside the cache
30 - uint32_t update_every_s; // the update every of the page
30 + uint32_t update_every_s; // the update every of the page
31 bool hot; // true if this entry is currently being collected
32 uint8_t *custom_data;
33 } PGC_ENTRY;
@@ -210,8 +210,8 @@ Word_t pgc_page_section(PGC_PAGE *page);
210 Word_t pgc_page_metric(PGC_PAGE *page);
211 time_t pgc_page_start_time_s(PGC_PAGE *page);
212 time_t pgc_page_end_time_s(PGC_PAGE *page);
213 -time_t pgc_page_update_every_s(PGC_PAGE *page);
214 -time_t pgc_page_fix_update_every(PGC_PAGE *page, time_t update_every_s);
213 +uint32_t pgc_page_update_every_s(PGC_PAGE *page);
214 +uint32_t pgc_page_fix_update_every(PGC_PAGE *page, uint32_t update_every_s);
215 time_t pgc_page_fix_end_time_s(PGC_PAGE *page, time_t end_time_s);
216 void *pgc_page_data(PGC_PAGE *page);
217 void *pgc_page_custom_data(PGC *cache, PGC_PAGE *page);
database/engine/journalfile.c
+3 -3
@@ -700,7 +700,7 @@ static void journalfile_restore_extent_metadata(struct rrdengine_instance *ctx,
700 .section = (Word_t)ctx,
701 .first_time_s = vd.start_time_s,
702 .last_time_s = vd.end_time_s,
703 - .latest_update_every_s = (uint32_t) vd.update_every_s,
703 + .latest_update_every_s = vd.update_every_s,
704 };
705
706 bool added;
@@ -1226,7 +1226,7 @@ void *journalfile_v2_write_data_page(struct journal_v2_header *j2_header, void *
1226 data_page->delta_end_s = (uint32_t) (page_info->end_time_s - (time_t) (j2_header->start_time_ut) / USEC_PER_SEC);
1227 data_page->extent_index = page_info->extent_index;
1228
1229 - data_page->update_every_s = (uint32_t) page_info->update_every_s;
1229 + data_page->update_every_s = page_info->update_every_s;
1230 data_page->page_length = (uint16_t) (ei ? ei->page_length : page_info->page_length);
1231 data_page->type = 0;
1232
@@ -1252,7 +1252,7 @@ static void *journalfile_v2_write_descriptors(struct journal_v2_header *j2_heade
1252 page_info = *PValue;
1253 // Write one descriptor and return the next data page location
1254 data_page = journalfile_v2_write_data_page(j2_header, (void *) data_page, page_info);
1255 - update_every_s = (uint32_t) page_info->update_every_s;
1255 + update_every_s = page_info->update_every_s;
1256 if (NULL == data_page)
1257 break;
1258 }
database/engine/metric.c
+12 -15
@@ -162,8 +162,8 @@ static inline bool metric_release_and_can_be_deleted(MRG *mrg __maybe_unused, ME
162
163 __atomic_sub_fetch(&mrg->index[partition].stats.current_references, 1, __ATOMIC_RELAXED);
164
165 - time_t first, last, ue;
166 - mrg_metric_get_retention(mrg, metric, &first, &last, &ue);
165 + time_t first, last;
166 + mrg_metric_get_retention(mrg, metric, &first, &last, NULL);
167 return (!first || !last || first > last);
168 }
169
@@ -394,8 +394,8 @@ inline bool mrg_metric_set_first_time_s(MRG *mrg __maybe_unused, METRIC *metric,
394 return true;
395 }
396
397 -inline void mrg_metric_expand_retention(MRG *mrg __maybe_unused, METRIC *metric, time_t first_time_s, time_t last_time_s, time_t update_every_s) {
398 - internal_fatal(first_time_s < 0 || last_time_s < 0 || update_every_s < 0,
397 +inline void mrg_metric_expand_retention(MRG *mrg __maybe_unused, METRIC *metric, time_t first_time_s, time_t last_time_s, uint32_t update_every_s) {
398 + internal_fatal(first_time_s < 0 || last_time_s < 0,
399 "DBENGINE METRIC: timestamp is negative");
400 internal_fatal(first_time_s > max_acceptable_collected_time(),
401 "DBENGINE METRIC: metric first time is in the future");
@@ -425,13 +425,14 @@ inline time_t mrg_metric_get_first_time_s(MRG *mrg __maybe_unused, METRIC *metri
425 return mrg_metric_get_first_time_s_smart(mrg, metric);
426 }
427
428 -inline void mrg_metric_get_retention(MRG *mrg __maybe_unused, METRIC *metric, time_t *first_time_s, time_t *last_time_s, time_t *update_every_s) {
428 +inline void mrg_metric_get_retention(MRG *mrg __maybe_unused, METRIC *metric, time_t *first_time_s, time_t *last_time_s, uint32_t *update_every_s) {
429 time_t clean = __atomic_load_n(&metric->latest_time_s_clean, __ATOMIC_RELAXED);
430 time_t hot = __atomic_load_n(&metric->latest_time_s_hot, __ATOMIC_RELAXED);
431
432 *last_time_s = MAX(clean, hot);
433 *first_time_s = mrg_metric_get_first_time_s_smart(mrg, metric);
434 - *update_every_s = __atomic_load_n(&metric->latest_update_every_s, __ATOMIC_RELAXED);
434 + if (update_every_s)
435 + *update_every_s = __atomic_load_n(&metric->latest_update_every_s, __ATOMIC_RELAXED);
436 }
437
438 inline bool mrg_metric_set_clean_latest_time_s(MRG *mrg __maybe_unused, METRIC *metric, time_t latest_time_s) {
@@ -498,8 +499,8 @@ inline bool mrg_metric_zero_disk_retention(MRG *mrg __maybe_unused, METRIC *metr
499 }
500 } while(do_again);
501
501 - time_t first, last, ue;
502 - mrg_metric_get_retention(mrg, metric, &first, &last, &ue);
502 + time_t first, last;
503 + mrg_metric_get_retention(mrg, metric, &first, &last, NULL);
504 return (first && last && first < last);
505 }
506
@@ -524,25 +525,21 @@ inline time_t mrg_metric_get_latest_time_s(MRG *mrg __maybe_unused, METRIC *metr
525 return MAX(clean, hot);
526 }
527
527 -inline bool mrg_metric_set_update_every(MRG *mrg __maybe_unused, METRIC *metric, time_t update_every_s) {
528 - internal_fatal(update_every_s < 0, "DBENGINE METRIC: timestamp is negative");
529 -
528 +inline bool mrg_metric_set_update_every(MRG *mrg __maybe_unused, METRIC *metric, uint32_t update_every_s) {
529 if(update_every_s > 0)
530 return set_metric_field_with_condition(metric->latest_update_every_s, update_every_s, true);
531
532 return false;
533 }
534
536 -inline bool mrg_metric_set_update_every_s_if_zero(MRG *mrg __maybe_unused, METRIC *metric, time_t update_every_s) {
537 - internal_fatal(update_every_s < 0, "DBENGINE METRIC: timestamp is negative");
538 -
535 +inline bool mrg_metric_set_update_every_s_if_zero(MRG *mrg __maybe_unused, METRIC *metric, uint32_t update_every_s) {
536 if(update_every_s > 0)
537 return set_metric_field_with_condition(metric->latest_update_every_s, update_every_s, _current <= 0);
538
539 return false;
540 }
541
545 -inline time_t mrg_metric_get_update_every_s(MRG *mrg __maybe_unused, METRIC *metric) {
542 +inline uint32_t mrg_metric_get_update_every_s(MRG *mrg __maybe_unused, METRIC *metric) {
543 return __atomic_load_n(&metric->latest_update_every_s, __ATOMIC_RELAXED);
544 }
545
database/engine/metric.h
+5 -5
@@ -70,12 +70,12 @@ bool mrg_metric_set_clean_latest_time_s(MRG *mrg, METRIC *metric, time_t latest_
70 bool mrg_metric_set_hot_latest_time_s(MRG *mrg, METRIC *metric, time_t latest_time_s);
71 time_t mrg_metric_get_latest_time_s(MRG *mrg, METRIC *metric);
72
73 -bool mrg_metric_set_update_every(MRG *mrg, METRIC *metric, time_t update_every_s);
74 -bool mrg_metric_set_update_every_s_if_zero(MRG *mrg, METRIC *metric, time_t update_every_s);
75 -time_t mrg_metric_get_update_every_s(MRG *mrg, METRIC *metric);
73 +bool mrg_metric_set_update_every(MRG *mrg, METRIC *metric, uint32_t update_every_s);
74 +bool mrg_metric_set_update_every_s_if_zero(MRG *mrg, METRIC *metric, uint32_t update_every_s);
75 +uint32_t mrg_metric_get_update_every_s(MRG *mrg, METRIC *metric);
76
77 -void mrg_metric_expand_retention(MRG *mrg, METRIC *metric, time_t first_time_s, time_t last_time_s, time_t update_every_s);
78 -void mrg_metric_get_retention(MRG *mrg, METRIC *metric, time_t *first_time_s, time_t *last_time_s, time_t *update_every_s);
77 +void mrg_metric_expand_retention(MRG *mrg, METRIC *metric, time_t first_time_s, time_t last_time_s, uint32_t update_every_s);
78 +void mrg_metric_get_retention(MRG *mrg, METRIC *metric, time_t *first_time_s, time_t *last_time_s, uint32_t *update_every_s);
79 bool mrg_metric_zero_disk_retention(MRG *mrg __maybe_unused, METRIC *metric);
80
81 bool mrg_metric_set_writer(MRG *mrg, METRIC *metric);
database/engine/pagecache.c
+9 -9
@@ -246,7 +246,7 @@ static size_t get_page_list_from_pgc(PGC *cache, METRIC *metric, struct rrdengin
246
247 time_t page_start_time_s = pgc_page_start_time_s(page);
248 time_t page_end_time_s = pgc_page_end_time_s(page);
249 - time_t page_update_every_s = pgc_page_update_every_s(page);
249 + uint32_t page_update_every_s = pgc_page_update_every_s(page);
250
251 if(!page_update_every_s)
252 page_update_every_s = dt_s;
@@ -282,7 +282,7 @@ static size_t get_page_list_from_pgc(PGC *cache, METRIC *metric, struct rrdengin
282 pd->metric_id = metric_id;
283 pd->first_time_s = page_start_time_s;
284 pd->last_time_s = page_end_time_s;
285 - pd->update_every_s = (uint32_t) page_update_every_s;
285 + pd->update_every_s = page_update_every_s;
286 pd->page = (open_cache_mode) ? NULL : page;
287 pd->status |= tags;
288
@@ -332,8 +332,8 @@ static size_t get_page_list_from_pgc(PGC *cache, METRIC *metric, struct rrdengin
332
333 static void pgc_inject_gap(struct rrdengine_instance *ctx, METRIC *metric, time_t start_time_s, time_t end_time_s) {
334
335 - time_t db_first_time_s, db_last_time_s, db_update_every_s;
336 - mrg_metric_get_retention(main_mrg, metric, &db_first_time_s, &db_last_time_s, &db_update_every_s);
335 + time_t db_first_time_s, db_last_time_s;
336 + mrg_metric_get_retention(main_mrg, metric, &db_first_time_s, &db_last_time_s, NULL);
337
338 if(is_page_in_time_range(start_time_s, end_time_s, db_first_time_s, db_last_time_s) != PAGE_IS_IN_RANGE)
339 return;
@@ -845,7 +845,7 @@ struct pgc_page *pg_cache_lookup_next(
845 struct rrdengine_instance *ctx,
846 PDC *pdc,
847 time_t now_s,
848 - time_t last_update_every_s,
848 + uint32_t last_update_every_s,
849 size_t *entries
850 ) {
851 if (unlikely(!pdc))
@@ -905,7 +905,7 @@ struct pgc_page *pg_cache_lookup_next(
905
906 time_t page_start_time_s = pgc_page_start_time_s(page);
907 time_t page_end_time_s = pgc_page_end_time_s(page);
908 - time_t page_update_every_s = pgc_page_update_every_s(page);
908 + uint32_t page_update_every_s = pgc_page_update_every_s(page);
909
910 if(unlikely(page_start_time_s == INVALID_TIME || page_end_time_s == INVALID_TIME)) {
911 __atomic_add_fetch(&rrdeng_cache_efficiency_stats.pages_zero_time_skipped, 1, __ATOMIC_RELAXED);
@@ -918,7 +918,7 @@ struct pgc_page *pg_cache_lookup_next(
918 if (unlikely(page_update_every_s <= 0 || page_update_every_s > 86400)) {
919 __atomic_add_fetch(&rrdeng_cache_efficiency_stats.pages_invalid_update_every_fixed, 1, __ATOMIC_RELAXED);
920 page_update_every_s = pgc_page_fix_update_every(page, last_update_every_s);
921 - pd->update_every_s = (uint32_t) page_update_every_s;
921 + pd->update_every_s = page_update_every_s;
922 }
923
924 size_t entries_by_size = pgd_slots_used(pgc_page_data(page));
@@ -983,7 +983,7 @@ struct pgc_page *pg_cache_lookup_next(
983 return page;
984 }
985
986 -void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s, time_t end_time_s, time_t update_every_s,
986 +void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s, time_t end_time_s, uint32_t update_every_s,
987 struct rrdengine_datafile *datafile, uint64_t extent_offset, unsigned extent_size, uint32_t page_length) {
988
989 if(!datafile_acquire(datafile, DATAFILE_ACQUIRE_OPEN_CACHE)) // for open cache item
@@ -1003,7 +1003,7 @@ void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s
1003 .metric_id = metric_id,
1004 .start_time_s = start_time_s,
1005 .end_time_s = end_time_s,
1006 - .update_every_s = (uint32_t) update_every_s,
1006 + .update_every_s = update_every_s,
1007 .size = 0,
1008 .data = datafile,
1009 .custom_data = (uint8_t *) &ext_io_data,
database/engine/pagecache.h
+2 -2
@@ -54,9 +54,9 @@ struct page_details_control;
54 void rrdeng_prep_wait(struct page_details_control *pdc);
55 void rrdeng_prep_query(struct page_details_control *pdc, bool worker);
56 void pg_cache_preload(struct rrdeng_query_handle *handle);
57 -struct pgc_page *pg_cache_lookup_next(struct rrdengine_instance *ctx, struct page_details_control *pdc, time_t now_s, time_t last_update_every_s, size_t *entries);
57 +struct pgc_page *pg_cache_lookup_next(struct rrdengine_instance *ctx, struct page_details_control *pdc, time_t now_s, uint32_t last_update_every_s, size_t *entries);
58 void pgc_and_mrg_initialize(void);
59
60 -void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s, time_t end_time_s, time_t update_every_s, struct rrdengine_datafile *datafile, uint64_t extent_offset, unsigned extent_size, uint32_t page_length);
60 +void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s, time_t end_time_s, uint32_t update_every_s, struct rrdengine_datafile *datafile, uint64_t extent_offset, unsigned extent_size, uint32_t page_length);
61
62 #endif /* NETDATA_PAGECACHE_H */
database/engine/pdc.c
+4 -5
@@ -628,7 +628,7 @@ void collect_page_flags_to_buffer(BUFFER *wb, RRDENG_COLLECT_PAGE_FLAGS flags) {
628 buffer_strcat(wb, "STEP_UNALIGNED");
629 }
630
631 -inline VALIDATED_PAGE_DESCRIPTOR validate_extent_page_descr(const struct rrdeng_extent_page_descr *descr, time_t now_s, time_t overwrite_zero_update_every_s, bool have_read_error) {
631 +inline VALIDATED_PAGE_DESCRIPTOR validate_extent_page_descr(const struct rrdeng_extent_page_descr *descr, time_t now_s, uint32_t overwrite_zero_update_every_s, bool have_read_error) {
632 time_t start_time_s = (time_t) (descr->start_time_ut / USEC_PER_SEC);
633
634 time_t end_time_s;
@@ -666,12 +666,12 @@ VALIDATED_PAGE_DESCRIPTOR validate_page(
666 uuid_t *uuid,
667 time_t start_time_s,
668 time_t end_time_s,
669 - time_t update_every_s, // can be zero, if unknown
669 + uint32_t update_every_s, // can be zero, if unknown
670 size_t page_length,
671 uint8_t page_type,
672 size_t entries, // can be zero, if unknown
673 time_t now_s, // can be zero, to disable future timestamp check
674 - time_t overwrite_zero_update_every_s, // can be zero, if unknown
674 + uint32_t overwrite_zero_update_every_s, // can be zero, if unknown
675 bool have_read_error,
676 const char *msg,
677 RRDENG_COLLECT_PAGE_FLAGS flags) {
@@ -732,7 +732,6 @@ VALIDATED_PAGE_DESCRIPTOR validate_page(
732 (now_s && vd.end_time_s > now_s) ||
733 vd.start_time_s <= 0 ||
734 vd.end_time_s <= 0 ||
735 - vd.update_every_s < 0 ||
735 (vd.start_time_s == vd.end_time_s && vd.entries > 1) ||
736 (vd.update_every_s == 0 && vd.entries > 1))
737 {
@@ -797,7 +796,7 @@ VALIDATED_PAGE_DESCRIPTOR validate_page(
796 );
797 }
798 else {
800 - const char *err_valid = (vd.is_valid) ? "" : "found invalid, ";
799 + const char *err_valid = "";
800 const char *err_start = (vd.start_time_s == start_time_s) ? "" : "start time updated, ";
801 const char *err_end = (vd.end_time_s == end_time_s) ? "" : "end time updated, ";
802 const char *err_update = (vd.update_every_s == update_every_s) ? "" : "update every updated, ";
database/engine/rrdengine.h
+7 -7
@@ -153,9 +153,9 @@ struct jv2_metrics_info {
153 struct jv2_page_info {
154 time_t start_time_s;
155 time_t end_time_s;
156 - time_t update_every_s;
157 - size_t page_length;
156 + uint32_t update_every_s;
157 uint32_t extent_index;
158 + size_t page_length;
159 void *custom_data;
160
161 // private
@@ -217,7 +217,7 @@ struct rrdeng_query_handle {
217
218 // internal data
219 time_t now_s;
220 - time_t dt_s;
220 + uint32_t dt_s;
221
222 unsigned position;
223 unsigned entries;
@@ -481,7 +481,7 @@ struct page_descr_with_data *page_descriptor_get(void);
481 typedef struct validated_page_descriptor {
482 time_t start_time_s;
483 time_t end_time_s;
484 - time_t update_every_s;
484 + uint32_t update_every_s;
485 size_t page_length;
486 size_t point_size;
487 size_t entries;
@@ -498,16 +498,16 @@ typedef struct validated_page_descriptor {
498 VALIDATED_PAGE_DESCRIPTOR validate_page(uuid_t *uuid,
499 time_t start_time_s,
500 time_t end_time_s,
501 - time_t update_every_s,
501 + uint32_t update_every_s,
502 size_t page_length,
503 uint8_t page_type,
504 size_t entries,
505 time_t now_s,
506 - time_t overwrite_zero_update_every_s,
506 + uint32_t overwrite_zero_update_every_s,
507 bool have_read_error,
508 const char *msg,
509 RRDENG_COLLECT_PAGE_FLAGS flags);
510 -VALIDATED_PAGE_DESCRIPTOR validate_extent_page_descr(const struct rrdeng_extent_page_descr *descr, time_t now_s, time_t overwrite_zero_update_every_s, bool have_read_error);
510 +VALIDATED_PAGE_DESCRIPTOR validate_extent_page_descr(const struct rrdeng_extent_page_descr *descr, time_t now_s, uint32_t overwrite_zero_update_every_s, bool have_read_error);
511 void collect_page_flags_to_buffer(BUFFER *wb, RRDENG_COLLECT_PAGE_FLAGS flags);
512
513 typedef enum {
database/engine/rrdengineapi.c
+17 -17
@@ -192,9 +192,9 @@ STORAGE_METRIC_HANDLE *rrdeng_metric_get_or_create(RRDDIM *rd, STORAGE_INSTANCE
192 // collect ops
193
194 static inline void check_and_fix_mrg_update_every(struct rrdeng_collect_handle *handle) {
195 - if(unlikely((time_t)(handle->update_every_ut / USEC_PER_SEC) != mrg_metric_get_update_every_s(main_mrg, handle->metric))) {
196 - internal_error(true, "DBENGINE: collection handle has update every %ld, but the metric registry has %ld. Fixing it.",
197 - (time_t)(handle->update_every_ut / USEC_PER_SEC), mrg_metric_get_update_every_s(main_mrg, handle->metric));
195 + if(unlikely((uint32_t)(handle->update_every_ut / USEC_PER_SEC) != mrg_metric_get_update_every_s(main_mrg, handle->metric))) {
196 + internal_error(true, "DBENGINE: collection handle has update every %u, but the metric registry has %u. Fixing it.",
197 + (uint32_t)(handle->update_every_ut / USEC_PER_SEC), mrg_metric_get_update_every_s(main_mrg, handle->metric));
198
199 if(unlikely(!handle->update_every_ut))
200 handle->update_every_ut = (usec_t)mrg_metric_get_update_every_s(main_mrg, handle->metric) * USEC_PER_SEC;
@@ -213,7 +213,7 @@ static inline bool check_completed_page_consistency(struct rrdeng_collect_handle
213 uuid_t *uuid = mrg_metric_uuid(main_mrg, handle->metric);
214 time_t start_time_s = pgc_page_start_time_s(handle->pgc_page);
215 time_t end_time_s = pgc_page_end_time_s(handle->pgc_page);
216 - time_t update_every_s = pgc_page_update_every_s(handle->pgc_page);
216 + uint32_t update_every_s = pgc_page_update_every_s(handle->pgc_page);
217 size_t page_length = handle->page_position * CTX_POINT_SIZE_BYTES(ctx);
218 size_t entries = handle->page_position;
219 time_t overwrite_zero_update_every_s = (time_t)(handle->update_every_ut / USEC_PER_SEC);
@@ -288,8 +288,8 @@ STORAGE_COLLECT_HANDLE *rrdeng_store_metric_init(STORAGE_METRIC_HANDLE *db_metri
288 // data collection may be able to go back in time and during the addition of new pages
289 // clean pages may be found matching ours!
290
291 - time_t db_first_time_s, db_last_time_s, db_update_every_s;
292 - mrg_metric_get_retention(main_mrg, metric, &db_first_time_s, &db_last_time_s, &db_update_every_s);
291 + time_t db_first_time_s, db_last_time_s;
292 + mrg_metric_get_retention(main_mrg, metric, &db_first_time_s, &db_last_time_s, NULL);
293 handle->page_end_time_ut = (usec_t)db_last_time_s * USEC_PER_SEC;
294
295 return (STORAGE_COLLECT_HANDLE *)handle;
@@ -336,7 +336,7 @@ static void rrdeng_store_metric_create_new_page(struct rrdeng_collect_handle *ha
336 PGD *data,
337 size_t data_size) {
338 time_t point_in_time_s = (time_t)(point_in_time_ut / USEC_PER_SEC);
339 - const time_t update_every_s = (time_t)(handle->update_every_ut / USEC_PER_SEC);
339 + const uint32_t update_every_s = (uint32_t)(handle->update_every_ut / USEC_PER_SEC);
340
341 PGC_ENTRY page_entry = {
342 .section = (Word_t) ctx,
@@ -345,7 +345,7 @@ static void rrdeng_store_metric_create_new_page(struct rrdeng_collect_handle *ha
345 .end_time_s = point_in_time_s,
346 .size = data_size,
347 .data = data,
348 - .update_every_s = (uint32_t) update_every_s,
348 + .update_every_s = update_every_s,
349 .hot = true
350 };
351
@@ -364,11 +364,11 @@ static void rrdeng_store_metric_create_new_page(struct rrdeng_collect_handle *ha
364 nd_log_limit_static_global_var(erl, 1, 0);
365 nd_log_limit(&erl, NDLS_DAEMON, NDLP_WARNING,
366 #endif
367 - "DBENGINE: metric '%s' new page from %ld to %ld, update every %ld, has a conflict in main cache "
368 - "with existing %s%s page from %ld to %ld, update every %ld - "
367 + "DBENGINE: metric '%s' new page from %ld to %ld, update every %u, has a conflict in main cache "
368 + "with existing %s%s page from %ld to %ld, update every %u - "
369 "is it collected more than once?",
370 uuid,
371 - page_entry.start_time_s, page_entry.end_time_s, (time_t)page_entry.update_every_s,
371 + page_entry.start_time_s, page_entry.end_time_s, page_entry.update_every_s,
372 pgc_is_page_hot(pgc_page) ? "hot" : "not-hot",
373 pgc_page_data(pgc_page) == PGD_EMPTY ? " gap" : "",
374 pgc_page_start_time_s(pgc_page), pgc_page_end_time_s(pgc_page), pgc_page_update_every_s(pgc_page)
@@ -644,8 +644,8 @@ int rrdeng_store_metric_finalize(STORAGE_COLLECT_HANDLE *collection_handle) {
644 if((handle->options & RRDENG_1ST_METRIC_WRITER) && !mrg_metric_clear_writer(main_mrg, handle->metric))
645 internal_fatal(true, "DBENGINE: metric is already released");
646
647 - time_t first_time_s, last_time_s, update_every_s;
648 - mrg_metric_get_retention(main_mrg, handle->metric, &first_time_s, &last_time_s, &update_every_s);
647 + time_t first_time_s, last_time_s;
648 + mrg_metric_get_retention(main_mrg, handle->metric, &first_time_s, &last_time_s, NULL);
649
650 mrg_metric_release(main_mrg, handle->metric);
651 freez(handle);
@@ -736,7 +736,8 @@ void rrdeng_load_metric_init(STORAGE_METRIC_HANDLE *db_metric_handle,
736 // is inserted into the main cache, to avoid scanning the journals
737 // again for pages matching the gap.
738
739 - time_t db_first_time_s, db_last_time_s, db_update_every_s;
739 + time_t db_first_time_s, db_last_time_s;
740 + uint32_t db_update_every_s;
741 mrg_metric_get_retention(main_mrg, metric, &db_first_time_s, &db_last_time_s, &db_update_every_s);
742
743 if(is_page_in_time_range(start_time_s, end_time_s, db_first_time_s, db_last_time_s) == PAGE_IS_IN_RANGE) {
@@ -799,7 +800,7 @@ static bool rrdeng_load_page_next(struct storage_engine_query_handle *rrddim_han
800
801 time_t page_start_time_s = pgc_page_start_time_s(handle->page);
802 time_t page_end_time_s = pgc_page_end_time_s(handle->page);
802 - time_t page_update_every_s = pgc_page_update_every_s(handle->page);
803 + uint32_t page_update_every_s = pgc_page_update_every_s(handle->page);
804
805 unsigned position;
806 if(likely(handle->now_s >= page_start_time_s && handle->now_s <= page_end_time_s)) {
@@ -949,8 +950,7 @@ bool rrdeng_metric_retention_by_uuid(STORAGE_INSTANCE *db_instance, uuid_t *dim_
950 if (unlikely(!metric))
951 return false;
952
952 - time_t update_every_s;
953 - mrg_metric_get_retention(main_mrg, metric, first_entry_s, last_entry_s, &update_every_s);
953 + mrg_metric_get_retention(main_mrg, metric, first_entry_s, last_entry_s, NULL);
954
955 mrg_metric_release(main_mrg, metric);
956