rrd metadata needs to be discoverable while replication is running (#20200)
Costa Tsaousis committed
Apr 28, 2025 at 17:08 UTC
ab81ad3f7de7a2b121d23ca6e6511749dbf24d80
4 files changed
+11
-5
src/database/rrddim.c
+6
-2
@@ -336,7 +336,7 @@ inline RRDDIM *rrddim_find(RRDSET *st, const char *id) {
336
337
RRDDIM *rd = rrddim_index_find(st, id);
338
if(rd) {
339
- if(rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE))
339
+ if(rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE) && !rrdset_is_discoverable(st))
340
return NULL;
341
342
rd->rrdset->last_accessed_time_s = now_realtime_sec();
@@ -351,7 +351,7 @@ inline RRDDIM_ACQUIRED *rrddim_find_and_acquire(RRDSET *st, const char *id) {
351
RRDDIM_ACQUIRED *rda = (RRDDIM_ACQUIRED *)dictionary_get_and_acquire_item(st->rrddim_root_index, id);
352
if(rda) {
353
RRDDIM *rd = (RRDDIM *) dictionary_acquired_item_value((const DICTIONARY_ITEM *)rda);
354
- if(rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)) {
354
+ if(rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE) && !rrdset_is_discoverable(st)) {
355
dictionary_acquired_item_release(st->rrddim_root_index, (const DICTIONARY_ITEM *)rda);
356
return NULL;
357
}
@@ -562,6 +562,7 @@ int rrddim_hide(RRDSET *st, const char *id) {
562
563
rrddim_option_set(rd, RRDDIM_OPTION_HIDDEN);
564
rrdcontext_updated_rrddim_flags(rd);
565
+ rrdset_metadata_updated(st);
566
return 0;
567
}
568
@@ -582,6 +583,7 @@ int rrddim_unhide(RRDSET *st, const char *id) {
583
584
rrddim_option_clear(rd, RRDDIM_OPTION_HIDDEN);
585
rrdcontext_updated_rrddim_flags(rd);
586
+ rrdset_metadata_updated(st);
587
return 0;
588
}
589
@@ -592,6 +594,7 @@ inline void rrddim_is_obsolete___safe_from_collector_thread(RRDSET *st, RRDDIM *
594
rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE_DIMENSIONS);
595
rrdhost_flag_set(st->rrdhost, RRDHOST_FLAG_PENDING_OBSOLETE_DIMENSIONS);
596
rrdcontext_updated_rrddim_flags(rd);
597
+ rrdset_metadata_updated(st);
598
}
599
600
inline void rrddim_isnot_obsolete___safe_from_collector_thread(RRDSET *st __maybe_unused, RRDDIM *rd) {
@@ -600,6 +603,7 @@ inline void rrddim_isnot_obsolete___safe_from_collector_thread(RRDSET *st __mayb
603
rrddim_flag_clear(rd, RRDDIM_FLAG_OBSOLETE);
604
rrddim_reinitialize_collection(rd);
605
rrdcontext_updated_rrddim_flags(rd);
606
+ rrdset_metadata_updated(st);
607
}
608
609
// ----------------------------------------------------------------------------
src/database/rrdset-index-id.c
+2
-2
@@ -338,7 +338,7 @@ RRDSET *rrdset_find(RRDHOST *host, const char *id) {
338
RRDSET *st = rrdset_index_find(host, id);
339
340
if(st) {
341
- if(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE))
341
+ if(!rrdset_is_discoverable(st))
342
return NULL;
343
344
st->last_accessed_time_s = now_realtime_sec();
@@ -366,7 +366,7 @@ RRDSET_ACQUIRED *rrdset_find_and_acquire(RRDHOST *host, const char *id) {
366
if(sta) {
367
RRDSET *st = (RRDSET *) dictionary_acquired_item_value((const DICTIONARY_ITEM *)sta);
368
if(st) {
369
- if(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)) {
369
+ if(!rrdset_is_discoverable(st)) {
370
dictionary_acquired_item_release(host->rrdset_root_index, (const DICTIONARY_ITEM *)sta);
371
return NULL;
372
}
src/database/rrdset-index-name.c
+1
-1
@@ -111,7 +111,7 @@ RRDSET *rrdset_find_byname(RRDHOST *host, const char *name) {
111
RRDSET *st = rrdset_index_find_name(host, name);
112
113
if(st) {
114
- if (rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE))
114
+ if(!rrdset_is_discoverable(st))
115
return NULL;
116
117
st->last_accessed_time_s = now_realtime_sec();
src/database/rrdset.h
+2
@@ -76,6 +76,8 @@ typedef enum __attribute__ ((__packed__)) rrdset_flags {
76
#define rrdset_is_replicating(st) (rrdset_flag_check(st, RRDSET_FLAG_SENDER_REPLICATION_IN_PROGRESS|RRDSET_FLAG_RECEIVER_REPLICATION_IN_PROGRESS) \
77
&& !rrdset_flag_check(st, RRDSET_FLAG_SENDER_REPLICATION_FINISHED|RRDSET_FLAG_RECEIVER_REPLICATION_FINISHED))
78
79
+#define rrdset_is_discoverable(st) (rrdset_is_replicating(st) || !rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE))
80
+
81
// --------------------------------------------------------------------------------------------------------------------
82
83
struct rrdset {