Acquire and release metric as needed during journal v2 migration (#21200)
Stelios Fragkakis committed
Oct 24, 2025 at 17:49 UTC
86e73a2166e67f2840a5ee28fb3bcf58615ba688
2 files changed
+10
-4
src/database/engine/cache.c
+8
-3
@@ -2477,6 +2477,8 @@ void pgc_open_cache_to_journal_v2(
2477
continue;
2478
}
2479
2480
+ METRIC *metric = mrg_metric_dup(main_mrg, (METRIC *)page->metric_id);
2481
+
2482
page_flag_set(page, PGC_PAGE_IS_BEING_MIGRATED_TO_V2);
2483
2484
pgc_queue_unlock(cache, &cache->hot);
@@ -2516,8 +2518,9 @@ void pgc_open_cache_to_journal_v2(
2518
2519
struct jv2_metrics_info *mi;
2520
if(!*PValue) {
2519
- mi = aral_mallocz(ar_mi); // callocz(1, sizeof(struct jv2_metrics_info));
2520
- mi->uuid = mrg_metric_uuid(main_mrg, (METRIC *)page->metric_id);
2521
+ mi = aral_mallocz(ar_mi);
2522
+ mi->metric = metric;
2523
+ mi->uuid = mrg_metric_uuid(main_mrg, metric);
2524
mi->first_time_s = page->start_time_s;
2525
mi->last_time_s = page->end_time_s;
2526
mi->number_of_pages = 1;
@@ -2530,6 +2533,7 @@ void pgc_open_cache_to_journal_v2(
2533
else {
2534
mi = *PValue;
2535
mi->number_of_pages++;
2536
+ mrg_metric_release(main_mrg, metric);
2537
if(page->start_time_s < mi->first_time_s)
2538
mi->first_time_s = page->start_time_s;
2539
if(page->end_time_s > mi->last_time_s)
@@ -2542,7 +2546,7 @@ void pgc_open_cache_to_journal_v2(
2546
(long)page->start_time_s, mi->JudyL_pages_by_start_time, PValue);
2547
2548
if(!*PValue) {
2545
- struct jv2_page_info *pi = aral_mallocz(ar_pi); // callocz(1, (sizeof(struct jv2_page_info)));
2549
+ struct jv2_page_info *pi = aral_mallocz(ar_pi);
2550
pi->start_time_s = page->start_time_s;
2551
pi->end_time_s = page->end_time_s;
2552
pi->update_every_s = page->update_every_s;
@@ -2605,6 +2609,7 @@ void pgc_open_cache_to_journal_v2(
2609
}
2610
2611
JudyLFreeArray(&mi->JudyL_pages_by_start_time, PJE0);
2612
+ mrg_metric_release(main_mrg, mi->metric);
2613
aral_freez(ar_mi, mi);
2614
}
2615
JudyLFreeArray(&JudyL_metrics, PJE0);
src/database/engine/rrdengine.h
+2
-1
@@ -171,10 +171,11 @@ struct jv2_extents_info {
171
172
struct jv2_metrics_info {
173
nd_uuid_t *uuid;
174
+ void *metric;
175
uint32_t page_list_header;
176
+ uint32_t number_of_pages;
177
time_t first_time_s;
178
time_t last_time_s;
177
- size_t number_of_pages;
179
Pvoid_t JudyL_pages_by_start_time;
180
};
181