summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStelios Fragkakis <52996999+stelfrag@users.noreply.github.com>2020-12-14 17:32:11 +0200
committerGitHub <noreply@github.com>2020-12-14 17:32:11 +0200
commitd600ae20c0456e23277850ecd5ad4542e465b00b (patch)
tree3f15b7567ecff51d64c3d6accc8fa20cd33880ab
parent4666343a757c0f9a6fbcf0288275e500e433bf1b (diff)
Fix issue with chart metadata sent multiple times over ACLK (#10381)
* Add a flag RRDSET_FLAG_ACLK to mark that a chart needs to go to the cloud * Change calls to aclk_update_chart to set the RRDSET_FLAG_ACLK instead Make the call to aclk_update_chart only in rrdset_done (and in case the chart is deleted) * Fix compilation error when cloud is disabled * Skip netdata_cloud_setting check when setting the flag / calling aclk_update_chart (checked in there)
-rw-r--r--database/rrd.h3
-rw-r--r--database/rrddim.c22
-rw-r--r--database/rrdset.c14
3 files changed, 20 insertions, 19 deletions
diff --git a/database/rrd.h b/database/rrd.h
index 6fafbf5710..62a2c7debe 100644
--- a/database/rrd.h
+++ b/database/rrd.h
@@ -450,7 +450,8 @@ typedef enum rrdset_flags {
RRDSET_FLAG_OBSOLETE_DIMENSIONS = 1 << 14, // this is marked by the collector/module when a chart has obsolete dimensions
// No new values have been collected for this chart since agent start or it was marked RRDSET_FLAG_OBSOLETE at
// least rrdset_free_obsolete_time seconds ago.
- RRDSET_FLAG_ARCHIVED = 1 << 15
+ RRDSET_FLAG_ARCHIVED = 1 << 15,
+ RRDSET_FLAG_ACLK = 1 << 16
} RRDSET_FLAGS;
#ifdef HAVE_C___ATOMIC
diff --git a/database/rrddim.c b/database/rrddim.c
index ac040ddf99..6a1408595c 100644
--- a/database/rrddim.c
+++ b/database/rrddim.c
@@ -210,8 +210,7 @@ void rrdcalc_link_to_rrddim(RRDDIM *rd, RRDSET *st, RRDHOST *host) {
}
}
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting)
- aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
}
@@ -459,8 +458,7 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
rrdset_unlock(st);
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting)
- aclk_update_chart(host, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
return(rd);
}
@@ -534,8 +532,8 @@ void rrddim_free_custom(RRDSET *st, RRDDIM *rd, int db_rotated)
break;
}
#ifdef ENABLE_ACLK
- if ((netdata_cloud_setting) && (db_rotated || RRD_MEMORY_MODE_DBENGINE != rrd_memory_mode))
- aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ if (db_rotated || RRD_MEMORY_MODE_DBENGINE != rrd_memory_mode)
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
}
@@ -556,8 +554,7 @@ int rrddim_hide(RRDSET *st, const char *id) {
rrddim_flag_set(rd, RRDDIM_FLAG_HIDDEN);
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting)
- aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
return 0;
}
@@ -574,8 +571,7 @@ int rrddim_unhide(RRDSET *st, const char *id) {
rrddim_flag_clear(rd, RRDDIM_FLAG_HIDDEN);
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting)
- aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
return 0;
}
@@ -590,8 +586,7 @@ inline void rrddim_is_obsolete(RRDSET *st, RRDDIM *rd) {
rrddim_flag_set(rd, RRDDIM_FLAG_OBSOLETE);
rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE_DIMENSIONS);
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting)
- aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
}
@@ -600,8 +595,7 @@ inline void rrddim_isnot_obsolete(RRDSET *st __maybe_unused, RRDDIM *rd) {
rrddim_flag_clear(rd, RRDDIM_FLAG_OBSOLETE);
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting)
- aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
}
diff --git a/database/rrdset.c b/database/rrdset.c
index f2932798f4..959e9a3da8 100644
--- a/database/rrdset.c
+++ b/database/rrdset.c
@@ -647,7 +647,7 @@ RRDSET *rrdset_create_custom(
aclk_add_collector(host, st->plugin_name, st->module_name);
}
}
- aclk_update_chart(host, st->id, ACLK_CMD_CHART);
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
}
#endif
freez(old_plugin);
@@ -944,10 +944,9 @@ RRDSET *rrdset_create_custom(
rrdhost_unlock(host);
#ifdef ENABLE_ACLK
- if (netdata_cloud_setting) {
+ if (netdata_cloud_setting)
aclk_add_collector(host, plugin, module);
- aclk_update_chart(host, st->id, ACLK_CMD_CHART);
- }
+ rrdset_flag_set(st, RRDSET_FLAG_ACLK);
#endif
return(st);
}
@@ -1383,6 +1382,13 @@ void rrdset_done(RRDSET *st) {
// a read lock is OK here
rrdset_rdlock(st);
+#ifdef ENABLE_ACLK
+ if (unlikely(rrdset_flag_check(st, RRDSET_FLAG_ACLK))) {
+ rrdset_flag_clear(st, RRDSET_FLAG_ACLK);
+ aclk_update_chart(st->rrdhost, st->id, ACLK_CMD_CHART);
+ }
+#endif
+
if(unlikely(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE))) {
error("Chart '%s' has the OBSOLETE flag set, but it is collected.", st->id);
rrdset_isnot_obsolete(st);