summaryrefslogtreecommitdiffstats
path: root/database
diff options
context:
space:
mode:
authorEmmanuel Vasilakis <mrzammler@mm.st>2022-05-03 10:37:14 +0300
committerGitHub <noreply@github.com>2022-05-03 10:37:14 +0300
commit0996abc7c0ef80bf9d128cfe52b69082831c61e4 (patch)
treea48f1a15cb339429ea01fe4a81e6129b127bcda5 /database
parent22863c42b9ccf59d340f39c7719b6ef19b455a16 (diff)
Check for chart obsoletion on children re-connections (#12707)
* check for chart obsoletion on children connections * use rrdset_is_obsolete
Diffstat (limited to 'database')
-rw-r--r--database/rrd.h2
-rw-r--r--database/rrdhost.c19
2 files changed, 21 insertions, 0 deletions
diff --git a/database/rrd.h b/database/rrd.h
index 4fa78b005a..371f1af6af 100644
--- a/database/rrd.h
+++ b/database/rrd.h
@@ -827,6 +827,8 @@ struct rrdhost {
struct receiver_state *receiver;
netdata_mutex_t receiver_lock;
+ time_t trigger_chart_obsoletion_check; // set when child connects, will instruct parent to
+ // trigger a check for obsoleted charts since previous connect
// ------------------------------------------------------------------------
// health monitoring options
diff --git a/database/rrdhost.c b/database/rrdhost.c
index 649736ca4f..b0874e3d3d 100644
--- a/database/rrdhost.c
+++ b/database/rrdhost.c
@@ -1528,6 +1528,16 @@ restart_after_removal:
}
}
+void rrdset_check_obsoletion(RRDHOST *host)
+{
+ RRDSET *st;
+ rrdset_foreach_write(st, host) {
+ if (rrdset_last_entry_t(st) < host->trigger_chart_obsoletion_check) {
+ rrdset_is_obsolete(st);
+ }
+ }
+}
+
void rrd_cleanup_obsolete_charts()
{
rrd_rdlock();
@@ -1547,6 +1557,15 @@ void rrd_cleanup_obsolete_charts()
#endif
rrdhost_unlock(host);
}
+
+ if (host != localhost &&
+ host->trigger_chart_obsoletion_check &&
+ host->trigger_chart_obsoletion_check + 120 < now_realtime_sec()) {
+ rrdhost_wrlock(host);
+ rrdset_check_obsoletion(host);
+ rrdhost_unlock(host);
+ host->trigger_chart_obsoletion_check = 0;
+ }
}
rrd_unlock();