]> arthur.barton.de Git - netdata.git/commitdiff
fixes a bug in the incremental algorithm that was introduced yesterday and made all...
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Sat, 24 Sep 2016 00:13:27 +0000 (03:13 +0300)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Sat, 24 Sep 2016 00:13:27 +0000 (03:13 +0300)
src/rrd.c
src/unit_test.c

index 709e81632d21c393e8f1c6a78be62dd6572baae2..2b70e72a724d00a4e377282d26a6d391896fdac7 100644 (file)
--- a/src/rrd.c
+++ b/src/rrd.c
@@ -937,6 +937,8 @@ collected_number rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, collected_number
     rd->updated = 1;
     rd->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));
+
     return rd->last_collected_value;
 }
 
@@ -1294,7 +1296,7 @@ unsigned long long rrdset_done(RRDSET *st)
     long long iterations = (now_collect_ut - last_stored_ut) / (update_every_ut);
     if((now_collect_ut % (update_every_ut)) == 0) iterations++;
 
-    for( ; next_store_ut <= now_collect_ut ; next_store_ut += update_every_ut, iterations-- ) {
+    for( ; next_store_ut <= now_collect_ut ; last_collect_ut = next_store_ut, next_store_ut += update_every_ut, iterations-- ) {
 #ifdef NETDATA_INTERNAL_CHECKS
         if(iterations < 0) { error("%s: iterations calculation wrapped! first_ut = %llu, last_stored_ut = %llu, next_store_ut = %llu, now_collect_ut = %llu", st->name, first_ut, last_stored_ut, next_store_ut, now_collect_ut); }
 #endif
@@ -1344,8 +1346,6 @@ unsigned long long rrdset_done(RRDSET *st)
                                 );
                         new_value = new_value * (calculated_number)(st->update_every * 1000000) / (calculated_number)(next_store_ut - last_stored_ut);
                     }
-
-                    last_collect_ut = next_store_ut;
                     break;
 
                 case RRDDIM_ABSOLUTE:
index 6cb9f8e732e51424c868f8ca75c6a5c709c2aafa..d699707a4fe3120947ab8ca68840abdb6668a2d8 100644 (file)
@@ -835,6 +835,49 @@ struct test test14c = {
         NULL                // results2
 };
 
+// --------------------------------------------------------------------------------------------------------------------
+// test15
+
+struct feed_values test15_feed[] = {
+        {       0, 1068066388 },
+        { 1008752, 1068822698 },
+        {  993809, 1069573072 },
+        {  995911, 1070324135 },
+        { 1014562, 1071078166 },
+        {  994684, 1071831349 },
+        {  993128, 1072235739 },
+        { 1010332, 1072958871 },
+        { 1003394, 1073707019 },
+        {  995201, 1074460255 },
+};
+
+collected_number test15_feed2[] = {
+    178825286, 178825286, 178825286, 178825286, 178825498, 178825498, 179165652, 179202964, 179203282, 179204130
+};
+
+calculated_number test15_results[] = {
+        5857.4080000, 5898.4540000, 5891.6590000, 5806.3160000, 5914.2640000, 3202.2630000, 5589.6560000, 5822.5260000, 5911.7520000
+};
+
+calculated_number test15_results2[] = {
+        0.0000000, 0.0000000, 0.0024944, 1.6324779, 0.0212777, 2655.1890000, 290.5387000, 5.6733610, 6.5960220
+};
+
+struct test test15 = {
+        "test15",           // name
+        "test incremental with 2 dimensions",
+        1,                  // update_every
+        8,                  // multiplier
+        1024,               // divisor
+        RRDDIM_INCREMENTAL, // algorithm
+        10,                 // feed entries
+        9,                  // result entries
+        test15_feed,        // feed
+        test15_results,     // results
+        test15_feed2,       // feed2
+        test15_results2     // results2
+};
+
 // --------------------------------------------------------------------------------------------------------------------
 
 int run_test(struct test *test)
@@ -982,6 +1025,9 @@ int run_all_mockup_tests(void)
     if(run_test(&test14c))
         return 1;
 
+    if(run_test(&test15))
+        return 1;
+
     return 0;
 }