From 2f5e6ab14f695392e30e42cf97db4870abafc881 Mon Sep 17 00:00:00 2001 From: Markos Fountoulakis <44345837+mfundul@users.noreply.github.com> Date: Mon, 29 Jun 2020 18:05:27 +0300 Subject: Disallow dimensions or charts being obsoleted and archived simultaneously. (#9436) --- database/engine/metadata_log/metadatalogapi.c | 6 +++--- database/engine/metadata_log/metalogpluginsd.c | 14 ++------------ database/rrddim.c | 4 ++++ database/rrdset.c | 5 +++++ 4 files changed, 14 insertions(+), 15 deletions(-) (limited to 'database') 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); -- cgit v1.2.3