summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a3d5320)
raw | patch | inline | side by side (parent: a3d5320)
author | Sebastian Harl <sh@tokkee.org> | |
Sun, 6 Apr 2014 11:46:37 +0000 (13:46 +0200) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Sun, 6 Apr 2014 11:46:37 +0000 (13:46 +0200) |
If the interval is zero, multiple updates happened at the same time. This does
not affect the interval at which the object is updated in the backend, though.
not affect the interval at which the object is updated in the backend, though.
src/core/store.c | patch | blob | history | |
t/core/store_test.c | patch | blob | history |
diff --git a/src/core/store.c b/src/core/store.c
index fd08de9101272dfafa7e7b0e6f8e4dbe1d626675..dace58f899f78ac27d681f22927ed088a7850170 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
else {
sdb_time_t interval = last_update - old->last_update;
old->last_update = last_update;
- if (old->interval)
- old->interval = (sdb_time_t)((0.9 * (double)old->interval)
- + (0.1 * (double)interval));
- else
- old->interval = interval;
+ if (interval) {
+ if (old->interval)
+ old->interval = (sdb_time_t)((0.9 * (double)old->interval)
+ + (0.1 * (double)interval));
+ else
+ old->interval = interval;
+ }
}
if (updated_obj)
diff --git a/t/core/store_test.c b/t/core/store_test.c
index d57747fcd9151f99e4aeb15d05639b537de1d2d0..29c5b1b67d7a8eee65639078e65fc7800f6a0bcf 100644 (file)
--- a/t/core/store_test.c
+++ b/t/core/store_test.c
"sdb_store_host() did not calculate interval correctly: "
"got: %"PRIscTIME"; expected: %"PRIscTIME, host->interval, 10);
+ /* multiple updates for the same timestamp don't modify the interval */
+ sdb_store_host("host", 40);
+ sdb_store_host("host", 40);
+ sdb_store_host("host", 40);
+ sdb_store_host("host", 40);
+
+ fail_unless(host->interval == 10,
+ "sdb_store_host() changed interval when doing multiple updates "
+ "using the same timestamp; got: %"PRIscTIME"; "
+ "expected: %"PRIscTIME, host->interval, 10);
+
+ /* multiple updates using an timestamp don't modify the interval */
+ sdb_store_host("host", 20);
+ sdb_store_host("host", 20);
+ sdb_store_host("host", 20);
+ sdb_store_host("host", 20);
+
+ fail_unless(host->interval == 10,
+ "sdb_store_host() changed interval when doing multiple updates "
+ "using an old timestamp; got: %"PRIscTIME"; expected: %"PRIscTIME,
+ host->interval, 10);
+
/* new interval: 20 us */
sdb_store_host("host", 60);
fail_unless(host->interval == 11,