|
@@ -894,6 +894,16 @@ static int journalfile_v2_validate(void *data_start, size_t journal_v2_file_size
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static inline time_t get_metric_latest_update_every(struct journal_page_header *metric_list_header)
|
|
|
+{
|
|
|
+ struct journal_page_list *metric_page =
|
|
|
+ (struct journal_page_list *)((uint8_t *)metric_list_header + sizeof(*metric_list_header));
|
|
|
+ uint32_t entries = metric_list_header->entries;
|
|
|
+ if (unlikely(!entries))
|
|
|
+ return 0;
|
|
|
+ return (time_t)metric_page[entries - 1].update_every_s;
|
|
|
+}
|
|
|
+
|
|
|
void journalfile_v2_populate_retention_to_mrg(struct rrdengine_instance *ctx, struct rrdengine_journalfile *journalfile) {
|
|
|
usec_t started_ut = now_monotonic_usec();
|
|
|
|
|
@@ -911,7 +921,7 @@ void journalfile_v2_populate_retention_to_mrg(struct rrdengine_instance *ctx, st
|
|
|
for (size_t i=0; i < entries; i++) {
|
|
|
time_t start_time_s = header_start_time_s + metric->delta_start_s;
|
|
|
time_t end_time_s = header_start_time_s + metric->delta_end_s;
|
|
|
- time_t update_every_s = (metric->entries > 1) ? ((end_time_s - start_time_s) / (entries - 1)) : 0;
|
|
|
+ time_t update_every_s = get_metric_latest_update_every((struct journal_page_header *) (data_start + metric->page_offset));
|
|
|
update_metric_retention_and_granularity_by_uuid(
|
|
|
ctx, &metric->uuid, start_time_s, end_time_s, update_every_s, now_s);
|
|
|
|