summaryrefslogtreecommitdiffstats
path: root/database/engine/journalfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/engine/journalfile.c')
-rw-r--r--database/engine/journalfile.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/database/engine/journalfile.c b/database/engine/journalfile.c
index de2b909c..9998ee54 100644
--- a/database/engine/journalfile.c
+++ b/database/engine/journalfile.c
@@ -40,7 +40,7 @@ static void update_metric_retention_and_granularity_by_uuid(
.section = (Word_t) ctx,
.first_time_s = first_time_s,
.last_time_s = last_time_s,
- .latest_update_every_s = update_every_s
+ .latest_update_every_s = (uint32_t) update_every_s
};
uuid_copy(entry.uuid, *uuid);
metric = mrg_metric_add_and_acquire(main_mrg, entry, &added);
@@ -617,7 +617,7 @@ static void journalfile_restore_extent_metadata(struct rrdengine_instance *ctx,
.section = (Word_t)ctx,
.first_time_s = vd.start_time_s,
.last_time_s = vd.end_time_s,
- .latest_update_every_s = vd.update_every_s,
+ .latest_update_every_s = (uint32_t) vd.update_every_s,
};
uuid_copy(entry.uuid, *temp_id);
@@ -911,15 +911,10 @@ 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;
+
update_metric_retention_and_granularity_by_uuid(
- ctx, &metric->uuid, start_time_s, end_time_s, update_every_s, now_s);
+ ctx, &metric->uuid, start_time_s, end_time_s, (time_t) metric->update_every_s, now_s);
-#ifdef NETDATA_INTERNAL_CHECKS
- struct journal_page_header *metric_list_header = (void *) (data_start + metric->page_offset);
- fatal_assert(uuid_compare(metric_list_header->uuid, metric->uuid) == 0);
- fatal_assert(metric->entries == metric_list_header->entries);
-#endif
metric++;
}
@@ -1038,7 +1033,7 @@ static int journalfile_metric_compare (const void *item1, const void *item2)
const struct jv2_metrics_info *metric1 = ((struct journal_metric_list_to_sort *) item1)->metric_info;
const struct jv2_metrics_info *metric2 = ((struct journal_metric_list_to_sort *) item2)->metric_info;
- return uuid_compare(*(metric1->uuid), *(metric2->uuid));
+ return memcmp(metric1->uuid, metric2->uuid, sizeof(uuid_t));
}
@@ -1084,6 +1079,7 @@ void *journalfile_v2_write_metric_page(struct journal_v2_header *j2_header, void
metric->page_offset = pages_offset;
metric->delta_start_s = (uint32_t)(metric_info->first_time_s - (time_t)(j2_header->start_time_ut / USEC_PER_SEC));
metric->delta_end_s = (uint32_t)(metric_info->last_time_s - (time_t)(j2_header->start_time_ut / USEC_PER_SEC));
+ metric->update_every_s = 0;
return ++metric;
}
@@ -1128,7 +1124,7 @@ void *journalfile_v2_write_data_page(struct journal_v2_header *j2_header, void *
data_page->delta_end_s = (uint32_t) (page_info->end_time_s - (time_t) (j2_header->start_time_ut) / USEC_PER_SEC);
data_page->extent_index = page_info->extent_index;
- data_page->update_every_s = page_info->update_every_s;
+ data_page->update_every_s = (uint32_t) page_info->update_every_s;
data_page->page_length = (uint16_t) (ei ? ei->page_length : page_info->page_length);
data_page->type = 0;
@@ -1136,7 +1132,8 @@ void *journalfile_v2_write_data_page(struct journal_v2_header *j2_header, void *
}
// Must be recorded in metric_info->entries
-void *journalfile_v2_write_descriptors(struct journal_v2_header *j2_header, void *data, struct jv2_metrics_info *metric_info)
+static void *journalfile_v2_write_descriptors(struct journal_v2_header *j2_header, void *data, struct jv2_metrics_info *metric_info,
+ struct journal_metric_list *current_metric)
{
Pvoid_t *PValue;
@@ -1148,13 +1145,16 @@ void *journalfile_v2_write_descriptors(struct journal_v2_header *j2_header, void
Word_t index_time = 0;
bool first = true;
struct jv2_page_info *page_info;
+ uint32_t update_every_s = 0;
while ((PValue = JudyLFirstThenNext(JudyL_array, &index_time, &first))) {
page_info = *PValue;
// Write one descriptor and return the next data page location
data_page = journalfile_v2_write_data_page(j2_header, (void *) data_page, page_info);
+ update_every_s = (uint32_t) page_info->update_every_s;
if (NULL == data_page)
break;
}
+ current_metric->update_every_s = update_every_s;
return data_page;
}
@@ -1291,6 +1291,7 @@ void journalfile_migrate_to_v2_callback(Word_t section, unsigned datafile_fileno
// Calculate current UUID offset from start of file. We will store this in the data page header
uint32_t uuid_offset = data - data_start;
+ struct journal_metric_list *current_metric = (void *) data;
// Write the UUID we are processing
data = (void *) journalfile_v2_write_metric_page(&j2_header, data, metric_info, pages_offset);
if (unlikely(!data))
@@ -1308,7 +1309,7 @@ void journalfile_migrate_to_v2_callback(Word_t section, unsigned datafile_fileno
uuid_offset);
// Start writing descr @ time
- void *page_trailer = journalfile_v2_write_descriptors(&j2_header, metric_page, metric_info);
+ void *page_trailer = journalfile_v2_write_descriptors(&j2_header, metric_page, metric_info, current_metric);
if (unlikely(!page_trailer))
break;