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
}