diff --git a/core/src/main/java/com/yahoo/ycsb/generator/AcknowledgedCounterGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/AcknowledgedCounterGenerator.java index b51053facf0c9bebd080152bcda4752cfb81ec32..c60936aedad43a32bebadecdb58106f24b54783b 100644 --- a/core/src/main/java/com/yahoo/ycsb/generator/AcknowledgedCounterGenerator.java +++ b/core/src/main/java/com/yahoo/ycsb/generator/AcknowledgedCounterGenerator.java @@ -8,11 +8,11 @@ import java.util.concurrent.locks.ReentrantLock; */ public class AcknowledgedCounterGenerator extends CounterGenerator { - private static final int WINDOW_SIZE = 10000; + private static final int WINDOW_SIZE = 1000000; - private ReentrantLock lock; - private boolean[] window; - private int limit; + private final ReentrantLock lock; + private final boolean[] window; + private volatile int limit; /** * Create a counter that starts at countstart. @@ -40,8 +40,11 @@ public class AcknowledgedCounterGenerator extends CounterGenerator */ public void acknowledge(int value) { + // read volatile variable to see other threads' changes + limit = limit; + if (value > limit + WINDOW_SIZE) { - throw new RuntimeException("This should be a different exception."); + throw new RuntimeException("Too many unacknowledged insertion keys."); } window[value % WINDOW_SIZE] = true; @@ -68,5 +71,8 @@ public class AcknowledgedCounterGenerator extends CounterGenerator lock.unlock(); } } + + // write volatile variable to make other threads see changes + limit = limit; } }