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);