@cryptotaxi247 / netdata-1 / commits / 6c2bab054

Fix dbengine not working when mmap fails (#7065)

Markos Fountoulakis committed Oct 11, 2019 at 17:39 UTC 6c2bab0543ee8df1df0ef4b4f4633841f6de9d7f
2 files changed +12 -9
database/rrddim.c
+8 -5
@@ -217,9 +217,9 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
217 snprintfz(fullfilename, FILENAME_MAX, "%s/%s.db", st->cache_dir, filename);
218
219 if(memory_mode == RRD_MEMORY_MODE_SAVE || memory_mode == RRD_MEMORY_MODE_MAP ||
220 - memory_mode == RRD_MEMORY_MODE_RAM || memory_mode == RRD_MEMORY_MODE_DBENGINE) {
220 + memory_mode == RRD_MEMORY_MODE_RAM) {
221 rd = (RRDDIM *)mymmap(
222 - (memory_mode == RRD_MEMORY_MODE_RAM || memory_mode == RRD_MEMORY_MODE_DBENGINE)?NULL:fullfilename
222 + (memory_mode == RRD_MEMORY_MODE_RAM) ? NULL : fullfilename
223 , size
224 , ((memory_mode == RRD_MEMORY_MODE_MAP) ? MAP_SHARED : MAP_PRIVATE)
225 , 1
@@ -240,7 +240,7 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
240 struct timeval now;
241 now_realtime_timeval(&now);
242
243 - if(memory_mode == RRD_MEMORY_MODE_RAM || memory_mode == RRD_MEMORY_MODE_DBENGINE) {
243 + if(memory_mode == RRD_MEMORY_MODE_RAM) {
244 memset(rd, 0, size);
245 }
246 else {
@@ -292,7 +292,10 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
292 if(unlikely(!rd)) {
293 // if we didn't manage to get a mmap'd dimension, just create one
294 rd = callocz(1, size);
295 - rd->rrd_memory_mode = (memory_mode == RRD_MEMORY_MODE_NONE) ? RRD_MEMORY_MODE_NONE : RRD_MEMORY_MODE_ALLOC;
295 + if (memory_mode == RRD_MEMORY_MODE_DBENGINE)
296 + rd->rrd_memory_mode = RRD_MEMORY_MODE_DBENGINE;
297 + else
298 + rd->rrd_memory_mode = (memory_mode == RRD_MEMORY_MODE_NONE) ? RRD_MEMORY_MODE_NONE : RRD_MEMORY_MODE_ALLOC;
299 }
300
301 rd->memsize = size;
@@ -460,7 +463,6 @@ void rrddim_free(RRDSET *st, RRDDIM *rd)
463 case RRD_MEMORY_MODE_SAVE:
464 case RRD_MEMORY_MODE_MAP:
465 case RRD_MEMORY_MODE_RAM:
463 - case RRD_MEMORY_MODE_DBENGINE:
466 debug(D_RRD_CALLS, "Unmapping dimension '%s'.", rd->name);
467 freez((void *)rd->id);
468 freez(rd->cache_filename);
@@ -469,6 +471,7 @@ void rrddim_free(RRDSET *st, RRDDIM *rd)
471
472 case RRD_MEMORY_MODE_ALLOC:
473 case RRD_MEMORY_MODE_NONE:
474 + case RRD_MEMORY_MODE_DBENGINE:
475 debug(D_RRD_CALLS, "Removing dimension '%s'.", rd->name);
476 freez((void *)rd->id);
477 freez(rd->cache_filename);
database/rrdset.c
+4 -4
@@ -369,13 +369,13 @@ void rrdset_free(RRDSET *st) {
369 case RRD_MEMORY_MODE_SAVE:
370 case RRD_MEMORY_MODE_MAP:
371 case RRD_MEMORY_MODE_RAM:
372 - case RRD_MEMORY_MODE_DBENGINE:
372 debug(D_RRD_CALLS, "Unmapping stats '%s'.", st->name);
373 munmap(st, st->memsize);
374 break;
375
376 case RRD_MEMORY_MODE_ALLOC:
377 case RRD_MEMORY_MODE_NONE:
378 + case RRD_MEMORY_MODE_DBENGINE:
379 freez(st);
380 break;
381 }
@@ -569,9 +569,9 @@ RRDSET *rrdset_create_custom(
569
570 snprintfz(fullfilename, FILENAME_MAX, "%s/main.db", cache_dir);
571 if(memory_mode == RRD_MEMORY_MODE_SAVE || memory_mode == RRD_MEMORY_MODE_MAP ||
572 - memory_mode == RRD_MEMORY_MODE_RAM || memory_mode == RRD_MEMORY_MODE_DBENGINE) {
572 + memory_mode == RRD_MEMORY_MODE_RAM) {
573 st = (RRDSET *) mymmap(
574 - (memory_mode == RRD_MEMORY_MODE_RAM || memory_mode == RRD_MEMORY_MODE_DBENGINE)?NULL:fullfilename
574 + (memory_mode == RRD_MEMORY_MODE_RAM) ? NULL : fullfilename
575 , size
576 , ((memory_mode == RRD_MEMORY_MODE_MAP) ? MAP_SHARED : MAP_PRIVATE)
577 , 0
@@ -602,7 +602,7 @@ RRDSET *rrdset_create_custom(
602 st->alarms = NULL;
603 st->flags = 0x00000000;
604
605 - if(memory_mode == RRD_MEMORY_MODE_RAM || memory_mode == RRD_MEMORY_MODE_DBENGINE) {
605 + if(memory_mode == RRD_MEMORY_MODE_RAM) {
606 memset(st, 0, size);
607 }
608 else {