X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=src%2Frrddim.c;h=54a17522fda29a006d312368a485f08562ae20b8;hb=0711ceaacadf4b435b11377ce9f0e65392675d2a;hp=7049f73cdf08804618a544b425e6cae3248d60c7;hpb=1c8a9f944e75831ca700852d7e8dad0e5c3fd0f7;p=netdata.git diff --git a/src/rrddim.c b/src/rrddim.c index 7049f73c..54a17522 100644 --- a/src/rrddim.c +++ b/src/rrddim.c @@ -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));