@cryptotaxi247 / netdata-1 / commits / be9dae3bf

attempt to avoid resetting database files loaded from disk and be more descriptive when a reset is required

Costa Tsaousis (ktsaou) committed Jun 22, 2017 at 14:09 UTC be9dae3bf82cdb7cef30648ac45211a5ab751c04
3 files changed +25 -27
src/common.c
+2
@@ -1070,6 +1070,8 @@ void *mymmap(const char *filename, size_t size, int flags, int ksm) {
1070 mem = memory_file_mmap_ksm(filename, size, flags);
1071
1072 if(mem == MAP_FAILED) return NULL;
1073 +
1074 + errno = 0;
1075 return mem;
1076 }
1077
src/rrddim.c
+23 -21
@@ -134,41 +134,43 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
134 memset(rd, 0, size);
135 }
136 else {
137 + int reset = 0;
138 +
139 if(strcmp(rd->magic, RRDDIMENSION_MAGIC) != 0) {
138 - errno = 0;
140 info("Initializing file %s.", fullfilename);
141 memset(rd, 0, size);
142 + reset = 1;
143 }
144 else if(rd->memsize != size) {
143 - errno = 0;
144 - error("File %s does not have the desired size. Clearing it.", fullfilename);
145 - memset(rd, 0, size);
146 - }
147 - else if(rd->multiplier != multiplier) {
148 - errno = 0;
149 - error("File %s does not have the same multiplier. Clearing it.", fullfilename);
150 - memset(rd, 0, size);
151 - }
152 - else if(rd->divisor != divisor) {
153 - errno = 0;
154 - error("File %s does not have the same divisor. Clearing it.", fullfilename);
145 + error("File %s does not have the desired size, expected %lu but found %lu. Clearing it.", fullfilename, size, rd->memsize);
146 memset(rd, 0, size);
147 + reset = 1;
148 }
149 else if(rd->update_every != st->update_every) {
158 - errno = 0;
159 - error("File %s does not have the same refresh frequency. Clearing it.", fullfilename);
150 + error("File %s does not have the same update frequency, expected %d but found %d. Clearing it.", fullfilename, st->update_every, rd->update_every);
151 memset(rd, 0, size);
152 + reset = 1;
153 }
154 else if(dt_usec(&now, &rd->last_collected_time) > (rd->entries * rd->update_every * USEC_PER_SEC)) {
163 - errno = 0;
164 - error("File %s is too old. Clearing it.", fullfilename);
155 + error("File %s is too old (last collected %llu seconds ago, but the database is %ld seconds). Clearing it.", fullfilename, dt_usec(&now, &rd->last_collected_time) / USEC_PER_SEC, rd->entries * rd->update_every);
156 memset(rd, 0, size);
157 + reset = 1;
158 }
159
168 - if(rd->algorithm && rd->algorithm != algorithm)
169 - error("File %s does not have the expected algorithm (expected %u '%s', found %u '%s'). Previous values may be wrong."
170 - , fullfilename, algorithm, rrd_algorithm_name(algorithm), rd->algorithm, rrd_algorithm_name(
171 - rd->algorithm));
160 + if(!reset) {
161 + if(rd->algorithm != algorithm) {
162 + info("File %s does not have the expected algorithm (expected %u '%s', found %u '%s'). Previous values may be wrong.",
163 + fullfilename, algorithm, rrd_algorithm_name(algorithm), rd->algorithm, rrd_algorithm_name(rd->algorithm));
164 + }
165 +
166 + if(rd->multiplier != multiplier) {
167 + info("File %s does not have the expected multiplier (expected " COLLECTED_NUMBER_FORMAT ", found " COLLECTED_NUMBER_FORMAT ". Previous values may be wrong.", fullfilename, multiplier, rd->multiplier);
168 + }
169 +
170 + if(rd->divisor != divisor) {
171 + info("File %s does not have the expected divisor (expected " COLLECTED_NUMBER_FORMAT ", found " COLLECTED_NUMBER_FORMAT ". Previous values may be wrong.", fullfilename, divisor, rd->divisor);
172 + }
173 + }
174 }
175
176 // make sure we have the right memory mode
src/rrdset.c
-6
@@ -464,34 +464,28 @@ RRDSET *rrdset_create_custom(
464 }
465 else {
466 if(strcmp(st->magic, RRDSET_MAGIC) != 0) {
467 - errno = 0;
467 info("Initializing file %s.", fullfilename);
468 memset(st, 0, size);
469 }
470 else if(strcmp(st->id, fullid) != 0) {
472 - errno = 0;
471 error("File %s contents are not for chart %s. Clearing it.", fullfilename, fullid);
472 // munmap(st, size);
473 // st = NULL;
474 memset(st, 0, size);
475 }
476 else if(st->memsize != size || st->entries != entries) {
479 - errno = 0;
477 error("File %s does not have the desired size. Clearing it.", fullfilename);
478 memset(st, 0, size);
479 }
480 else if(st->update_every != update_every) {
484 - errno = 0;
481 error("File %s does not have the desired update frequency. Clearing it.", fullfilename);
482 memset(st, 0, size);
483 }
484 else if((now - st->last_updated.tv_sec) > update_every * entries) {
489 - errno = 0;
485 error("File %s is too old. Clearing it.", fullfilename);
486 memset(st, 0, size);
487 }
488 else if(st->last_updated.tv_sec > now + update_every) {
494 - errno = 0;
489 error("File %s refers to the future. Clearing it.", fullfilename);
490 memset(st, 0, size);
491 }