]> arthur.barton.de Git - netdata.git/blobdiff - src/rrddim.c
Merge pull request #1952 from ktsaou/master
[netdata.git] / src / rrddim.c
index 7049f73cdf08804618a544b425e6cae3248d60c7..54a17522fda29a006d312368a485f08562ae20b8 100644 (file)
@@ -71,7 +71,7 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
     rrdset_strncpyz_name(filename, id, FILENAME_MAX);
     snprintfz(fullfilename, FILENAME_MAX, "%s/%s.db", st->cache_dir, filename);
 
-    if(st->rrd_memory_mode != RRD_MEMORY_MODE_RAM) {
+    if(st->rrd_memory_mode == RRD_MEMORY_MODE_SAVE || st->rrd_memory_mode == RRD_MEMORY_MODE_MAP) {
         rd = (RRDDIM *)mymmap(fullfilename, size, ((st->rrd_memory_mode == RRD_MEMORY_MODE_MAP) ? MAP_SHARED : MAP_PRIVATE), 1);
         if(likely(rd)) {
             // we have a file mapped for rd
@@ -80,7 +80,6 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
             rd->id = NULL;
             rd->name = NULL;
             rd->cache_filename = NULL;
-            rd->flags = 0x00000000;
             rd->variables = NULL;
             rd->next = NULL;
             rd->rrdset = NULL;
@@ -133,7 +132,7 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
     if(unlikely(!rd)) {
         // if we didn't manage to get a mmap'd dimension, just create one
         rd = callocz(1, size);
-        rd->rrd_memory_mode = RRD_MEMORY_MODE_RAM;
+        rd->rrd_memory_mode = (st->rrd_memory_mode == RRD_MEMORY_MODE_NONE) ? RRD_MEMORY_MODE_NONE : RRD_MEMORY_MODE_RAM;
     }
 
     rd->memsize = size;
@@ -163,8 +162,10 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
     rd->update_every = st->update_every;
 
     // prevent incremental calculation spikes
-    rd->counter = 0;
-    rrddim_flag_clear(rd, RRDDIM_FLAG_UPDATED);
+    rd->collections_counter = 0;
+    rd->updated = 0;
+    rd->flags = 0x00000000;
+
     rd->calculated_value = 0;
     rd->last_calculated_value = 0;
     rd->collected_value = 0;
@@ -178,7 +179,7 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
     rd->rrdset = st;
 
     // append this dimension
-    pthread_rwlock_wrlock(&st->rwlock);
+    rrdset_wrlock(st);
     if(!st->dimensions)
         st->dimensions = rd;
     else {
@@ -193,7 +194,7 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
         rrddimvar_create(rd, RRDVAR_TYPE_TIME_T, NULL, "_last_collected_t", &rd->last_collected_time.tv_sec, 0);
     }
 
-    pthread_rwlock_unlock(&st->rwlock);
+    rrdset_unlock(st);
 
     if(unlikely(rrddim_index_add(st, rd) != rd))
         error("RRDDIM: INTERNAL ERROR: attempt to index duplicate dimension '%s' on chart '%s'", rd->id, st->id);
@@ -243,6 +244,7 @@ void rrddim_free(RRDSET *st, RRDDIM *rd)
             munmap(rd, rd->memsize);
             break;
 
+        case RRD_MEMORY_MODE_NONE:
         case RRD_MEMORY_MODE_RAM:
             debug(D_RRD_CALLS, "Removing dimension '%s'.", rd->name);
             freez((void *)rd->id);
@@ -291,8 +293,9 @@ inline collected_number rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, collected_
 
     now_realtime_timeval(&rd->last_collected_time);
     rd->collected_value = value;
-    rrddim_flag_set(rd, RRDDIM_FLAG_UPDATED);
-    rd->counter++;
+    rd->updated = 1;
+
+    rd->collections_counter++;
 
     // fprintf(stderr, "%s.%s %llu " COLLECTED_NUMBER_FORMAT " dt %0.6f" " rate " CALCULATED_NUMBER_FORMAT "\n", st->name, rd->name, st->usec_since_last_update, value, (float)((double)st->usec_since_last_update / (double)1000000), (calculated_number)((value - rd->last_collected_value) * (calculated_number)rd->multiplier / (calculated_number)rd->divisor * 1000000.0 / (calculated_number)st->usec_since_last_update));