@cryptotaxi247 / netdata-1 / commits / 2f5e6ab14

Disallow dimensions or charts being obsoleted and archived simultaneously. (#9436)

Markos Fountoulakis committed Jun 29, 2020 at 18:05 UTC 2f5e6ab14f695392e30e42cf97db4870abafc881
4 files changed +14 -15
database/engine/metadata_log/metadatalogapi.c
+3 -3
@@ -116,7 +116,7 @@ BUFFER *metalog_update_chart_buffer(RRDSET *st, uint32_t compaction_id)
116 , rrdset_type_name(st->chart_type)
117 , st->priority
118 , st->update_every
119 - , rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)?"obsolete":""
119 + , "" /* archived charts cannot be obsolete */
120 , rrdset_flag_check(st, RRDSET_FLAG_DETAIL)?"detail":""
121 , rrdset_flag_check(st, RRDSET_FLAG_STORE_FIRST)?"store_first":""
122 , rrdset_flag_check(st, RRDSET_FLAG_HIDDEN)?"hidden":""
@@ -140,7 +140,7 @@ BUFFER *metalog_update_chart_buffer(RRDSET *st, uint32_t compaction_id)
140 , rrd_algorithm_name(rd->algorithm)
141 , rd->multiplier
142 , rd->divisor
143 - , rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)?"obsolete":""
143 + , "" /* archived dimensions cannot be obsolete */
144 , rrddim_flag_check(rd, RRDDIM_FLAG_HIDDEN)?"hidden":""
145 , rrddim_flag_check(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS)?"noreset":""
146 );
@@ -216,7 +216,7 @@ BUFFER *metalog_update_dimension_buffer(RRDDIM *rd)
216 , rrd_algorithm_name(rd->algorithm)
217 , rd->multiplier
218 , rd->divisor
219 - , rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)?"obsolete":""
219 + , "" /* archived dimensions cannot be obsolete */
220 , rrddim_flag_check(rd, RRDDIM_FLAG_HIDDEN)?"hidden":""
221 , rrddim_flag_check(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS)?"noreset":""
222 );
database/engine/metadata_log/metalogpluginsd.c
+2 -12
@@ -19,12 +19,8 @@ PARSER_RC metalog_pluginsd_chart_action(void *user, char *type, char *id, char *
19 plugin, module, priority, update_every,
20 chart_type, RRD_MEMORY_MODE_DBENGINE, (host)->rrd_history_entries, 1, chart_uuid);
21
22 + rrdset_isnot_obsolete(st); /* archived charts cannot be obsolete */
23 if (options && *options) {
23 - if (strstr(options, "obsolete"))
24 - rrdset_is_obsolete(st);
25 - else
26 - rrdset_isnot_obsolete(st);
27 -
24 if (strstr(options, "detail"))
25 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
26 else
@@ -40,7 +36,6 @@ PARSER_RC metalog_pluginsd_chart_action(void *user, char *type, char *id, char *
36 else
37 rrdset_flag_clear(st, RRDSET_FLAG_STORE_FIRST);
38 } else {
43 - rrdset_isnot_obsolete(st);
39 rrdset_flag_clear(st, RRDSET_FLAG_DETAIL);
40 rrdset_flag_clear(st, RRDSET_FLAG_STORE_FIRST);
41 }
@@ -71,19 +66,14 @@ PARSER_RC metalog_pluginsd_dimension_action(void *user, RRDSET *st, char *id, ch
66 dim_uuid);
67 rrddim_flag_clear(rd, RRDDIM_FLAG_HIDDEN);
68 rrddim_flag_clear(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS);
69 + rrddim_isnot_obsolete(st, rd); /* archived dimensions cannot be obsolete */
70 if (options && *options) {
75 - if (strstr(options, "obsolete") != NULL)
76 - rrddim_is_obsolete(st, rd);
77 - else
78 - rrddim_isnot_obsolete(st, rd);
71 if (strstr(options, "hidden") != NULL)
72 rrddim_flag_set(rd, RRDDIM_FLAG_HIDDEN);
73 if (strstr(options, "noreset") != NULL)
74 rrddim_flag_set(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS);
75 if (strstr(options, "nooverflow") != NULL)
76 rrddim_flag_set(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS);
85 - } else {
86 - rrddim_isnot_obsolete(st, rd);
77 }
78 if (dim_uuid) { /* It's a valid object */
79 struct metalog_record record;
database/rrddim.c
+4
@@ -570,6 +570,10 @@ int rrddim_unhide(RRDSET *st, const char *id) {
570 inline void rrddim_is_obsolete(RRDSET *st, RRDDIM *rd) {
571 debug(D_RRD_CALLS, "rrddim_is_obsolete() for chart %s, dimension %s", st->name, rd->name);
572
573 + if(unlikely(rrddim_flag_check(rd, RRDDIM_FLAG_ARCHIVED))) {
574 + info("Cannot obsolete already archived dimension %s from chart %s", rd->name, st->name);
575 + return;
576 + }
577 rrddim_flag_set(rd, RRDDIM_FLAG_OBSOLETE);
578 rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE_DIMENSIONS);
579 #ifdef ENABLE_ACLK
database/rrdset.c
+5
@@ -185,6 +185,11 @@ int rrdset_set_name(RRDSET *st, const char *name) {
185 }
186
187 inline void rrdset_is_obsolete(RRDSET *st) {
188 + if(unlikely(rrdset_flag_check(st, RRDSET_FLAG_ARCHIVED))) {
189 + info("Cannot obsolete already archived chart %s", st->name);
190 + return;
191 + }
192 +
193 if(unlikely(!(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)))) {
194 rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE);
195 rrdset_flag_clear(st, RRDSET_FLAG_UPSTREAM_EXPOSED);