From: Costa Tsaousis Date: Mon, 14 Nov 2016 23:00:11 +0000 (+0200) Subject: Merge pull request #1249 from ktsaou/master X-Git-Tag: v1.5.0~182 X-Git-Url: https://arthur.barton.de/gitweb/?a=commitdiff_plain;h=0c9c47b9b58485a3280cffea022aab805efd7488;hp=67500072b402045aac3fef4d0672cdfba42c53b0;p=netdata.git Merge pull request #1249 from ktsaou/master another fix for plugins synchronization --- diff --git a/node.d/node_modules/netdata.js b/node.d/node_modules/netdata.js index 706f75f4..c56a9184 100644 --- a/node.d/node_modules/netdata.js +++ b/node.d/node_modules/netdata.js @@ -208,15 +208,14 @@ var netdata = { service.update_every = netdata.options.update_every; // align the runs - service.next_run = now - (now % (service.update_every * 1000)); + service.next_run = now - (now % (service.update_every * 1000)) + (service.update_every * 1000); service.commit = function() { if(this.added !== true) { this.added = true; var now = new Date().getTime(); - while( this.next_run < now ) - this.next_run += (this.update_every * 1000); + this.next_run = now - (now % (service.update_every * 1000)) + (service.update_every * 1000); netdata.services.push(this); if(netdata.options.DEBUG === true) netdata.debug(this.module.name + ': ' + this.name + ': service committed.'); @@ -553,8 +552,7 @@ var netdata = { service.update(); now = new Date().getTime(); - while(service.next_run < now) - service.next_run += (service.update_every * 1000); + service.next_run = now - (now % (service.update_every * 1000)) + (service.update_every * 1000); } // 1/10th of update_every in pause diff --git a/python.d/python_modules/base.py b/python.d/python_modules/base.py index 4ab9de4c..9d428492 100644 --- a/python.d/python_modules/base.py +++ b/python.d/python_modules/base.py @@ -148,7 +148,7 @@ class SimpleService(threading.Thread): self.debug("starting data collection - update frequency:", str(step), ", retries allowed:", str(self.retries)) while True: # run forever, unless something is wrong now = float(time.time()) - next = self.timetable['next'] = now - (now % step) + step + (step / 3) # add 1/3 into the iteration to sync with netdata + next = self.timetable['next'] = now - (now % step) + step # it is important to do this in a loop # sleep() is interruptable diff --git a/src/log.c b/src/log.c index bf2ad6b3..dc008342 100644 --- a/src/log.c +++ b/src/log.c @@ -125,7 +125,11 @@ int error_log_limit(int reset) { // prevent all logs if the errors per period is 0 if(error_log_errors_per_period == 0) +#ifdef NETDATA_INTERNAL_CHECKS + return 0; +#else return 1; +#endif time_t now = time(NULL); if(!start) start = now; @@ -185,7 +189,11 @@ int error_log_limit(int reset) { prevented++; // prevent logging this error +#ifdef NETDATA_INTERNAL_CHECKS + return 0; +#else return 1; +#endif } return 0; diff --git a/src/rrd.c b/src/rrd.c index 7d8bf394..52de637b 100644 --- a/src/rrd.c +++ b/src/rrd.c @@ -438,7 +438,7 @@ void rrdset_reset(RRDSET *st) memset(rd->values, 0, rd->entries * sizeof(storage_number)); } } -static long align_entries_to_pagesize(long entries) { +static inline long align_entries_to_pagesize(long entries) { if(entries < 5) entries = 5; if(entries > RRD_HISTORY_ENTRIES_MAX) entries = RRD_HISTORY_ENTRIES_MAX; @@ -460,6 +460,11 @@ static long align_entries_to_pagesize(long entries) { #endif } +static inline void timeval_align(struct timeval *tv, int update_every) { + tv->tv_sec -= tv->tv_sec % update_every; + tv->tv_usec = 500000; +} + RRDSET *rrdset_create(const char *type, const char *id, const char *name, const char *family, const char *context, const char *title, const char *units, long priority, int update_every, int chart_type) { if(!type || !type[0]) { @@ -527,10 +532,8 @@ RRDSET *rrdset_create(const char *type, const char *id, const char *name, const } // make sure the database is aligned - if(st->last_updated.tv_sec % update_every) { - st->last_updated.tv_sec -= st->last_updated.tv_sec % update_every; - st->last_updated.tv_usec = 0; - } + if(st->last_updated.tv_sec) + timeval_align(&st->last_updated, update_every); } if(st) { @@ -1100,10 +1103,7 @@ unsigned long long rrdset_done(RRDSET *st) // it is the first entry // set the last_collected_time to now gettimeofday(&st->last_collected_time, NULL); - - // align it to update_every - st->last_collected_time.tv_sec -= st->last_collected_time.tv_sec % st->update_every; - st->last_collected_time.tv_usec = 0; + timeval_align(&st->last_collected_time, st->update_every); last_collect_ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec - update_every_ut; @@ -1146,10 +1146,7 @@ unsigned long long rrdset_done(RRDSET *st) st->usec_since_last_update = update_every_ut; gettimeofday(&st->last_collected_time, NULL); - - // align it to update_every - st->last_collected_time.tv_sec -= st->last_collected_time.tv_sec % st->update_every; - st->last_collected_time.tv_usec = 0; + timeval_align(&st->last_collected_time, st->update_every); unsigned long long ut = st->last_collected_time.tv_sec * 1000000ULL + st->last_collected_time.tv_usec - st->usec_since_last_update; st->last_updated.tv_sec = (time_t) (ut / 1000000ULL);