package org.radargun.stages.cache.test;
import java.util.Random;
import org.radargun.config.DefinitionElement;
import org.radargun.config.Namespace;
import org.radargun.config.Property;
import org.radargun.config.PropertyHelper;
import org.radargun.stages.test.TestStage;
/**
* @author Radim Vansa <rvansa@redhat.com>
*/
public class CollidingKeysSelector implements KeySelector {
private final Random random;
private final long numEntries;
public CollidingKeysSelector(Random random, long numEntries) {
this.random = random;
this.numEntries = numEntries;
}
@Override
public long next() {
return (random.nextLong() & Long.MAX_VALUE) % numEntries;
}
@Namespace(name = TestStage.NAMESPACE, deprecatedName = TestStage.DEPRECATED_NAMESPACE)
@DefinitionElement(name = "colliding-keys", doc = "In the test fixed set of entries is used and this is shared among all stressor threads.")
public static class Factory implements KeySelectorFactory {
@Property(doc = "Total number of key-value entries.", optional = false)
private long numEntries = 0;
@Override
public KeySelector newInstance(CacheOperationsTestStage stage, Random random, int globalThreadId, int threadId) {
return new CollidingKeysSelector(random, numEntries);
}
@Override
public String toString() {
return CollidingKeysSelector.class.getSimpleName() + PropertyHelper.toString(this);
}
}
}