summaryrefslogtreecommitdiffstats
path: root/database
diff options
context:
space:
mode:
authorMarkos Fountoulakis <44345837+mfundul@users.noreply.github.com>2020-06-29 18:05:27 +0300
committerGitHub <noreply@github.com>2020-06-29 18:05:27 +0300
commit2f5e6ab14f695392e30e42cf97db4870abafc881 (patch)
treefff07ef01df6f39e83a486e78c23b9c83f35d6d8 /database
parent551684bc7cfbfa6649b789bf49fa580bccf1693a (diff)
Disallow dimensions or charts being obsoleted and archived simultaneously. (#9436)
Diffstat (limited to 'database')
-rwxr-xr-xdatabase/engine/metadata_log/metadatalogapi.c6
-rwxr-xr-xdatabase/engine/metadata_log/metalogpluginsd.c14
-rw-r--r--database/rrddim.c4
-rw-r--r--database/rrdset.c5
4 files changed, 14 insertions, 15 deletions
diff --git a/database/engine/metadata_log/metadatalogapi.c b/database/engine/metadata_log/metadatalogapi.c
index 5c8fb5e5ff..b4266675d5 100755
--- a/database/engine/metadata_log/metadatalogapi.c
+++ b/database/engine/metadata_log/metadatalogapi.c
@@ -116,7 +116,7 @@ BUFFER *metalog_update_chart_buffer(RRDSET *st, uint32_t compaction_id)
, rrdset_type_name(st->chart_type)
, st->priority
, st->update_every
- , rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)?"obsolete":""
+ , "" /* archived charts cannot be obsolete */
, rrdset_flag_check(st, RRDSET_FLAG_DETAIL)?"detail":""
, rrdset_flag_check(st, RRDSET_FLAG_STORE_FIRST)?"store_first":""
, rrdset_flag_check(st, RRDSET_FLAG_HIDDEN)?"hidden":""
@@ -140,7 +140,7 @@ BUFFER *metalog_update_chart_buffer(RRDSET *st, uint32_t compaction_id)
, rrd_algorithm_name(rd->algorithm)
, rd->multiplier
, rd->divisor
- , rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)?"obsolete":""
+ , "" /* archived dimensions cannot be obsolete */
, rrddim_flag_check(rd, RRDDIM_FLAG_HIDDEN)?"hidden":""
, rrddim_flag_check(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS)?"noreset":""
);
@@ -216,7 +216,7 @@ BUFFER *metalog_update_dimension_buffer(RRDDIM *rd)
, rrd_algorithm_name(rd->algorithm)
, rd->multiplier
, rd->divisor
- , rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)?"obsolete":""
+ , "" /* archived dimensions cannot be obsolete */
, rrddim_flag_check(rd, RRDDIM_FLAG_HIDDEN)?"hidden":""
, rrddim_flag_check(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS)?"noreset":""
);
diff --git a/database/engine/metadata_log/metalogpluginsd.c b/database/engine/metadata_log/metalogpluginsd.c
index 2c6dae49ff..789ad47192 100755
--- a/database/engine/metadata_log/metalogpluginsd.c
+++ b/database/engine/metadata_log/metalogpluginsd.c
@@ -19,12 +19,8 @@ PARSER_RC metalog_pluginsd_chart_action(void *user, char *type, char *id, char *
plugin, module, priority, update_every,
chart_type, RRD_MEMORY_MODE_DBENGINE, (host)->rrd_history_entries, 1, chart_uuid);
+ rrdset_isnot_obsolete(st); /* archived charts cannot be obsolete */
if (options && *options) {
- if (strstr(options, "obsolete"))
- rrdset_is_obsolete(st);
- else
- rrdset_isnot_obsolete(st);
-
if (strstr(options, "detail"))
rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
else
@@ -40,7 +36,6 @@ PARSER_RC metalog_pluginsd_chart_action(void *user, char *type, char *id, char *
else
rrdset_flag_clear(st, RRDSET_FLAG_STORE_FIRST);
} else {
- rrdset_isnot_obsolete(st);
rrdset_flag_clear(st, RRDSET_FLAG_DETAIL);
rrdset_flag_clear(st, RRDSET_FLAG_STORE_FIRST);
}
@@ -71,19 +66,14 @@ PARSER_RC metalog_pluginsd_dimension_action(void *user, RRDSET *st, char *id, ch
dim_uuid);
rrddim_flag_clear(rd, RRDDIM_FLAG_HIDDEN);
rrddim_flag_clear(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS);
+ rrddim_isnot_obsolete(st, rd); /* archived dimensions cannot be obsolete */
if (options && *options) {
- if (strstr(options, "obsolete") != NULL)
- rrddim_is_obsolete(st, rd);
- else
- rrddim_isnot_obsolete(st, rd);
if (strstr(options, "hidden") != NULL)
rrddim_flag_set(rd, RRDDIM_FLAG_HIDDEN);
if (strstr(options, "noreset") != NULL)
rrddim_flag_set(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS);
if (strstr(options, "nooverflow") != NULL)
rrddim_flag_set(rd, RRDDIM_FLAG_DONT_DETECT_RESETS_OR_OVERFLOWS);
- } else {
- rrddim_isnot_obsolete(st, rd);
}
if (dim_uuid) { /* It's a valid object */
struct metalog_record record;
diff --git a/database/rrddim.c b/database/rrddim.c
index c71f48ca84..bb76e332f6 100644
--- a/database/rrddim.c
+++ b/database/rrddim.c
@@ -570,6 +570,10 @@ int rrddim_unhide(RRDSET *st, const char *id) {
inline void rrddim_is_obsolete(RRDSET *st, RRDDIM *rd) {
debug(D_RRD_CALLS, "rrddim_is_obsolete() for chart %s, dimension %s", st->name, rd->name);
+ if(unlikely(rrddim_flag_check(rd, RRDDIM_FLAG_ARCHIVED))) {
+ info("Cannot obsolete already archived dimension %s from chart %s", rd->name, st->name);
+ return;
+ }
rrddim_flag_set(rd, RRDDIM_FLAG_OBSOLETE);
rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE_DIMENSIONS);
#ifdef ENABLE_ACLK
diff --git a/database/rrdset.c b/database/rrdset.c
index 9fc4009aff..cacc85216e 100644
--- a/database/rrdset.c
+++ b/database/rrdset.c
@@ -185,6 +185,11 @@ int rrdset_set_name(RRDSET *st, const char *name) {
}
inline void rrdset_is_obsolete(RRDSET *st) {
+ if(unlikely(rrdset_flag_check(st, RRDSET_FLAG_ARCHIVED))) {
+ info("Cannot obsolete already archived chart %s", st->name);
+ return;
+ }
+
if(unlikely(!(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)))) {
rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE);
rrdset_flag_clear(st, RRDSET_FLAG_UPSTREAM_EXPOSED);