check orphan host flag when deciding for host cleanup; #2772
Costa Tsaousis (ktsaou) committed
Sep 22, 2017 at 00:13 UTC
6f68ba1ff277626ddec0ff5a742e086063cc446a
3 files changed
+24
-22
src/rrd.h
+3
-3
@@ -595,10 +595,10 @@ extern void rrdhost_free_all(void);
595
extern void rrdhost_save_all(void);
596
extern void rrdhost_cleanup_all(void);
597
598
-extern void rrdhost_cleanup_orphan_hosts(RRDHOST *protected);
598
+extern void rrdhost_cleanup_orphan_hosts_nolock(RRDHOST *protected);
599
extern void rrdhost_free(RRDHOST *host);
600
-extern void rrdhost_save(RRDHOST *host);
601
-extern void rrdhost_delete(RRDHOST *host);
600
+extern void rrdhost_save_charts(RRDHOST *host);
601
+extern void rrdhost_delete_charts(RRDHOST *host);
602
603
extern void rrdset_update_heterogeneous_flag(RRDSET *st);
604
src/rrdhost.c
+19
-18
@@ -346,9 +346,10 @@ RRDHOST *rrdhost_find_or_create(
346
// update host tags
347
rrdhost_init_tags(host, tags);
348
}
349
- rrd_unlock();
349
351
- rrdhost_cleanup_orphan_hosts(host);
350
+ rrdhost_cleanup_orphan_hosts_nolock(host);
351
+
352
+ rrd_unlock();
353
354
return host;
355
}
@@ -356,6 +357,7 @@ RRDHOST *rrdhost_find_or_create(
357
static inline int rrdhost_should_be_removed(RRDHOST *host, RRDHOST *protected, time_t now) {
358
if(host != protected
359
&& host != localhost
360
+ && rrdhost_flag_check(host, RRDHOST_ORPHAN)
361
&& !host->connected_senders
362
&& host->senders_disconnected_time
363
&& host->senders_disconnected_time + rrdhost_free_orphan_time < now)
@@ -364,11 +366,9 @@ static inline int rrdhost_should_be_removed(RRDHOST *host, RRDHOST *protected, t
366
return 0;
367
}
368
367
-void rrdhost_cleanup_orphan_hosts(RRDHOST *protected) {
369
+void rrdhost_cleanup_orphan_hosts_nolock(RRDHOST *protected) {
370
time_t now = now_realtime_sec();
371
370
- rrd_wrlock();
371
-
372
RRDHOST *host;
373
374
restart_after_removal:
@@ -376,17 +376,15 @@ restart_after_removal:
376
if(rrdhost_should_be_removed(host, protected, now)) {
377
info("Host '%s' with machine guid '%s' is obsolete - cleaning up.", host->hostname, host->machine_guid);
378
379
- if(rrdset_flag_check(host, RRDHOST_DELETE_ORPHAN_HOST) && rrdset_flag_check(host, RRDHOST_ORPHAN))
380
- rrdhost_delete(host);
379
+ if(rrdhost_flag_check(host, RRDHOST_DELETE_ORPHAN_HOST))
380
+ rrdhost_delete_charts(host);
381
else
382
- rrdhost_save(host);
382
+ rrdhost_save_charts(host);
383
384
rrdhost_free(host);
385
goto restart_after_removal;
386
}
387
}
388
-
389
- rrd_unlock();
388
}
389
390
// ----------------------------------------------------------------------------
@@ -534,7 +532,7 @@ void rrdhost_free_all(void) {
532
// ----------------------------------------------------------------------------
533
// RRDHOST - save host files
534
537
-void rrdhost_save(RRDHOST *host) {
535
+void rrdhost_save_charts(RRDHOST *host) {
536
if(!host) return;
537
538
info("Saving/Closing database of host '%s'...", host->hostname);
@@ -557,7 +555,7 @@ void rrdhost_save(RRDHOST *host) {
555
// ----------------------------------------------------------------------------
556
// RRDHOST - delete host files
557
560
-void rrdhost_delete(RRDHOST *host) {
558
+void rrdhost_delete_charts(RRDHOST *host) {
559
if(!host) return;
560
561
info("Deleting database of host '%s'...", host->hostname);
@@ -582,12 +580,13 @@ void rrdhost_delete(RRDHOST *host) {
580
// ----------------------------------------------------------------------------
581
// RRDHOST - cleanup host files
582
585
-void rrdhost_cleanup(RRDHOST *host) {
583
+void rrdhost_cleanup_charts(RRDHOST *host) {
584
if(!host) return;
585
586
info("Cleaning up database of host '%s'...", host->hostname);
587
588
RRDSET *st;
589
+ uint32_t rrdhost_delete_obsolete_charts = rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS);
590
591
// we get a write lock
592
// to ensure only one thread is saving the database
@@ -596,7 +595,7 @@ void rrdhost_cleanup(RRDHOST *host) {
595
rrdset_foreach_write(st, host) {
596
rrdset_rdlock(st);
597
599
- if(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE) && rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS))
598
+ if(rrdhost_delete_obsolete_charts && rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE))
599
rrdset_delete(st);
600
else
601
rrdset_save(st);
@@ -618,7 +617,7 @@ void rrdhost_save_all(void) {
617
618
RRDHOST *host;
619
rrdhost_foreach_read(host)
621
- rrdhost_save(host);
620
+ rrdhost_save_charts(host);
621
622
rrd_unlock();
623
}
@@ -634,9 +633,9 @@ void rrdhost_cleanup_all(void) {
633
RRDHOST *host;
634
rrdhost_foreach_read(host) {
635
if(host != localhost && rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS) && !host->connected_senders)
637
- rrdhost_delete(host);
636
+ rrdhost_delete_charts(host);
637
else
639
- rrdhost_cleanup(host);
638
+ rrdhost_cleanup_charts(host);
639
}
640
641
rrd_unlock();
@@ -651,6 +650,8 @@ void rrdhost_cleanup_obsolete_charts(RRDHOST *host) {
650
651
RRDSET *st;
652
653
+ uint32_t rrdhost_delete_obsolete_charts = rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS);
654
+
655
restart_after_removal:
656
rrdset_foreach_write(st, host) {
657
if(unlikely(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)
@@ -661,7 +662,7 @@ restart_after_removal:
662
663
rrdset_rdlock(st);
664
664
- if(rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS))
665
+ if(rrdhost_delete_obsolete_charts)
666
rrdset_delete(st);
667
else
668
rrdset_save(st);
src/rrdpush.c
+2
-1
@@ -684,8 +684,9 @@ static int rrdpush_receive(int fd, const char *key, const char *hostname, const
684
if(host->connected_senders > 0)
685
info("STREAM %s [receive from [%s]:%s]: multiple streaming connections for the same host detected. If multiple netdata are pushing metrics for the same charts, at the same time, the result is unexpected.", host->hostname, client_ip, client_port);
686
687
- host->connected_senders++;
687
rrdhost_flag_clear(host, RRDHOST_ORPHAN);
688
+ host->connected_senders++;
689
+ host->senders_disconnected_time = 0;
690
if(health_enabled != CONFIG_BOOLEAN_NO) {
691
if(alarms_delay > 0) {
692
host->health_delay_up_to = now_realtime_sec() + alarms_delay;