@cryptotaxi247 / netdata-1 / commits / 7c7b2509c

on exit delete orphan hosts and obsolete chart files; fixes #2329

Costa Tsaousis (ktsaou) committed Jun 28, 2017 at 12:00 UTC 7c7b2509c3a95b9d1b9a661c3e1b0867de8a707c
4 files changed +74 -18
src/main.c
+2 -2
@@ -9,8 +9,8 @@ void netdata_cleanup_and_exit(int ret) {
9
10 debug(D_EXIT, "Called: netdata_cleanup_and_exit()");
11
12 - // save the database
13 - rrdhost_save_all();
12 + // cleanup the database
13 + rrdhost_cleanup_all();
14
15 // unlink the pid
16 if(pidfile[0]) {
src/rrd.h
+5 -4
@@ -353,8 +353,8 @@ typedef struct rrdset RRDSET;
353
354 typedef enum rrdhost_flags {
355 RRDHOST_ORPHAN = 1 << 0, // this host is orphan (not receiving data)
356 - RRDHOST_DELETE_OBSOLETE_FILES = 1 << 1, // delete files of obsolete charts
357 - RRDHOST_DELETE_ORPHAN_FILES = 1 << 2 // delete the entire host when orphan
356 + RRDHOST_DELETE_OBSOLETE_CHARTS = 1 << 1, // delete files of obsolete charts
357 + RRDHOST_DELETE_ORPHAN_HOST = 1 << 2 // delete the entire host when orphan
358 } RRDHOST_FLAGS;
359
360 #define rrdhost_flag_check(host, flag) ((host)->flags & flag)
@@ -560,8 +560,9 @@ extern RRDSET *rrdset_create_custom(RRDHOST *host
560
561 extern void rrdhost_free_all(void);
562 extern void rrdhost_save_all(void);
563 +extern void rrdhost_cleanup_all(void);
564
564 -extern void rrdhost_cleanup_orphan(RRDHOST *protected);
565 +extern void rrdhost_cleanup_orphan_hosts(RRDHOST *protected);
566 extern void rrdhost_free(RRDHOST *host);
567 extern void rrdhost_save(RRDHOST *host);
568 extern void rrdhost_delete(RRDHOST *host);
@@ -669,7 +670,7 @@ extern void rrdset_reset(RRDSET *st);
670 extern void rrdset_save(RRDSET *st);
671 extern void rrdset_delete(RRDSET *st);
672
672 -extern void rrdhost_cleanup_obsolete(RRDHOST *host);
673 +extern void rrdhost_cleanup_obsolete_charts(RRDHOST *host);
674
675 #endif /* NETDATA_RRD_INTERNALS */
676
src/rrdhost.c
+66 -11
@@ -143,10 +143,10 @@ RRDHOST *rrdhost_create(const char *hostname,
143 avl_init_lock(&(host->variables_root_index), rrdvar_compare);
144
145 if(config_get_boolean(CONFIG_SECTION_GLOBAL, "delete obsolete charts files", 1))
146 - rrdhost_flag_set(host, RRDHOST_DELETE_OBSOLETE_FILES);
146 + rrdhost_flag_set(host, RRDHOST_DELETE_OBSOLETE_CHARTS);
147
148 if(config_get_boolean(CONFIG_SECTION_GLOBAL, "delete orphan hosts files", 1) && !is_localhost)
149 - rrdhost_flag_set(host, RRDHOST_DELETE_ORPHAN_FILES);
149 + rrdhost_flag_set(host, RRDHOST_DELETE_ORPHAN_HOST);
150
151
152 // ------------------------------------------------------------------------
@@ -348,12 +348,12 @@ RRDHOST *rrdhost_find_or_create(
348 }
349 rrd_unlock();
350
351 - rrdhost_cleanup_orphan(host);
351 + rrdhost_cleanup_orphan_hosts(host);
352
353 return host;
354 }
355
356 -static inline int rrdhost_should_be_deleted(RRDHOST *host, RRDHOST *protected, time_t now) {
356 +static inline int rrdhost_should_be_removed(RRDHOST *host, RRDHOST *protected, time_t now) {
357 if(host != protected
358 && host != localhost
359 && !host->connected_senders
@@ -364,7 +364,7 @@ static inline int rrdhost_should_be_deleted(RRDHOST *host, RRDHOST *protected, t
364 return 0;
365 }
366
367 -void rrdhost_cleanup_orphan(RRDHOST *protected) {
367 +void rrdhost_cleanup_orphan_hosts(RRDHOST *protected) {
368 time_t now = now_realtime_sec();
369
370 rrd_wrlock();
@@ -373,10 +373,10 @@ void rrdhost_cleanup_orphan(RRDHOST *protected) {
373
374 restart_after_removal:
375 rrdhost_foreach_write(host) {
376 - if(rrdhost_should_be_deleted(host, protected, now)) {
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_ORPHAN))
379 + if(rrdset_flag_check(host, RRDHOST_DELETE_ORPHAN_HOST) && rrdset_flag_check(host, RRDHOST_ORPHAN))
380 rrdhost_delete(host);
381 else
382 rrdhost_save(host);
@@ -532,7 +532,7 @@ void rrdhost_free_all(void) {
532 }
533
534 // ----------------------------------------------------------------------------
535 -// RRDHOST - save
535 +// RRDHOST - save host files
536
537 void rrdhost_save(RRDHOST *host) {
538 if(!host) return;
@@ -555,7 +555,7 @@ void rrdhost_save(RRDHOST *host) {
555 }
556
557 // ----------------------------------------------------------------------------
558 -// RRDHOST - delete files
558 +// RRDHOST - delete host files
559
560 void rrdhost_delete(RRDHOST *host) {
561 if(!host) return;
@@ -579,6 +579,38 @@ void rrdhost_delete(RRDHOST *host) {
579 rrdhost_unlock(host);
580 }
581
582 +// ----------------------------------------------------------------------------
583 +// RRDHOST - cleanup host files
584 +
585 +void rrdhost_cleanup(RRDHOST *host) {
586 + if(!host) return;
587 +
588 + info("Cleaning up database of host '%s'...", host->hostname);
589 +
590 + RRDSET *st;
591 +
592 + // we get a write lock
593 + // to ensure only one thread is saving the database
594 + rrdhost_wrlock(host);
595 +
596 + rrdset_foreach_write(st, host) {
597 + rrdset_rdlock(st);
598 +
599 + if(rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE))
600 + rrdset_delete(st);
601 + else
602 + rrdset_save(st);
603 +
604 + rrdset_unlock(st);
605 + }
606 +
607 + rrdhost_unlock(host);
608 +}
609 +
610 +
611 +// ----------------------------------------------------------------------------
612 +// RRDHOST - save all hosts to disk
613 +
614 void rrdhost_save_all(void) {
615 info("Saving database [%zu hosts(s)]...", rrd_hosts_available);
616
@@ -591,7 +623,30 @@ void rrdhost_save_all(void) {
623 rrd_unlock();
624 }
625
594 -void rrdhost_cleanup_obsolete(RRDHOST *host) {
626 +// ----------------------------------------------------------------------------
627 +// RRDHOST - save or delete all hosts from disk
628 +
629 +void rrdhost_cleanup_all(void) {
630 + info("Cleaning up database [%zu hosts(s)]...", rrd_hosts_available);
631 +
632 + rrd_rdlock();
633 +
634 + RRDHOST *host;
635 + rrdhost_foreach_read(host) {
636 + if(host != localhost && rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS) && !host->connected_senders)
637 + rrdhost_delete(host);
638 + else
639 + rrdhost_cleanup(host);
640 + }
641 +
642 + rrd_unlock();
643 +}
644 +
645 +
646 +// ----------------------------------------------------------------------------
647 +// RRDHOST - save or delete all the host charts from disk
648 +
649 +void rrdhost_cleanup_obsolete_charts(RRDHOST *host) {
650 time_t now = now_realtime_sec();
651
652 RRDSET *st;
@@ -606,7 +661,7 @@ restart_after_removal:
661
662 rrdset_rdlock(st);
663
609 - if(rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_FILES))
664 + if(rrdhost_flag_check(host, RRDHOST_DELETE_OBSOLETE_CHARTS))
665 rrdset_delete(st);
666 else
667 rrdset_save(st);
src/rrdset.c
+1 -1
@@ -589,7 +589,7 @@ RRDSET *rrdset_create_custom(
589 rrdsetcalc_link_matching(st);
590 rrdcalctemplate_link_matching(st);
591
592 - rrdhost_cleanup_obsolete(host);
592 + rrdhost_cleanup_obsolete_charts(host);
593
594 rrdhost_unlock(host);
595