From ca25820e06840d2e30aceeefd3f59a4d4b8b5bc9 Mon Sep 17 00:00:00 2001 From: El Dorado131 <sicoe.alexandru@googlemail.com> Date: Tue, 6 Feb 2018 18:47:19 +0000 Subject: [PATCH] When the TimeSeriesWorkload was run with fieldcount=1 and tagcount=1 and tagcardinality=1 the data generated always had the same timestamp. This commit fixes this behavior by forcing a tag rollover when there is only one tag. (#1091) --- .../ycsb/workloads/TimeSeriesWorkload.java | 2 +- .../workloads/TestTimeSeriesWorkload.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/yahoo/ycsb/workloads/TimeSeriesWorkload.java b/core/src/main/java/com/yahoo/ycsb/workloads/TimeSeriesWorkload.java index 3a637eeb..5d0eabd0 100644 --- a/core/src/main/java/com/yahoo/ycsb/workloads/TimeSeriesWorkload.java +++ b/core/src/main/java/com/yahoo/ycsb/workloads/TimeSeriesWorkload.java @@ -1252,7 +1252,7 @@ public class TimeSeriesWorkload extends Workload { boolean tagRollover = false; for (int i = tagCardinality.length - 1; i >= 0; --i) { if (tagCardinality[i] <= 1) { - // nothing to increment here + tagRollover = true; // Only one tag so needs roll over. continue; } diff --git a/core/src/test/java/com/yahoo/ycsb/workloads/TestTimeSeriesWorkload.java b/core/src/test/java/com/yahoo/ycsb/workloads/TestTimeSeriesWorkload.java index 55acc1f6..409331ac 100644 --- a/core/src/test/java/com/yahoo/ycsb/workloads/TestTimeSeriesWorkload.java +++ b/core/src/test/java/com/yahoo/ycsb/workloads/TestTimeSeriesWorkload.java @@ -128,6 +128,33 @@ public class TestTimeSeriesWorkload { final MockDB db = new MockDB(); wl.doInsert(db, null); } + + @Test + public void insertOneKeyOneTagCardinalityOne() throws Exception { + final Properties p = getUTProperties(); + p.put(CoreWorkload.FIELD_COUNT_PROPERTY, "1"); + p.put(TimeSeriesWorkload.TAG_COUNT_PROPERTY, "1"); + p.put(TimeSeriesWorkload.TAG_CARDINALITY_PROPERTY, "1"); + final TimeSeriesWorkload wl = getWorkload(p, true); + final Object threadState = wl.initThread(p, 0, 1); + + final MockDB db = new MockDB(); + for (int i = 0; i < 74; i++) { + assertTrue(wl.doInsert(db, threadState)); + } + assertEquals(db.keys.size(), 74); + assertEquals(db.values.size(), 74); + long timestamp = 1451606400; + for (int i = 0; i < db.keys.size(); i++) { + assertEquals(db.keys.get(i), "AAAA"); + assertEquals(db.values.get(i).get("AA").toString(), "AAAA"); + assertEquals(Utils.bytesToLong(db.values.get(i).get( + TimeSeriesWorkload.TIMESTAMP_KEY_PROPERTY_DEFAULT).toArray()), timestamp); + assertTrue(((NumericByteIterator) db.values.get(i) + .get(TimeSeriesWorkload.VALUE_KEY_PROPERTY_DEFAULT)).isFloatingPoint()); + timestamp += 60; + } + } @Test public void insertOneKeyTwoTagsLowCardinality() throws Exception { -- GitLab