package org.radargun.stages.cache.test; import org.radargun.config.Namespace; import org.radargun.config.Property; import org.radargun.config.PropertyHelper; import org.radargun.config.Stage; import org.radargun.stages.cache.generators.KeyGenerator; import org.radargun.stages.cache.generators.ValueGenerator; import org.radargun.stages.helpers.CacheSelector; import org.radargun.stages.test.TestStage; import org.radargun.traits.ConditionalOperations; import org.radargun.traits.InjectTrait; import org.radargun.utils.Fuzzy; /** * @author Radim Vansa <rvansa@redhat.com> */ @Namespace(name = TestStage.NAMESPACE, deprecatedName = TestStage.DEPRECATED_NAMESPACE) @Stage(doc = "Benchmark where several client threads access cache limited by time or number of requests.") public abstract class CacheTestStage extends TestStage { @Property(doc = "Size of the value in bytes. Default is 1000.", converter = Fuzzy.IntegerConverter.class) protected Fuzzy<Integer> entrySize = Fuzzy.uniform(1000); @Property(doc = "Generator of keys used in the test (transforms key ID into key object). By default the generator is retrieved from slave state.", complexConverter = KeyGenerator.ComplexConverter.class) protected KeyGenerator keyGenerator = null; @Property(doc = "Generator of values used in the test. By default the generator is retrieved from slave state.", complexConverter = ValueGenerator.ComplexConverter.class) protected ValueGenerator valueGenerator = null; @Property(doc = "Selects which caches will be used in the test. By default the selector is retrieved from slave state.", complexConverter = CacheSelector.ComplexConverter.class) protected CacheSelector cacheSelector = null; @InjectTrait protected ConditionalOperations conditionalOperations; @Override protected void prepare() { if (keyGenerator == null) { keyGenerator = (KeyGenerator) slaveState.get(KeyGenerator.KEY_GENERATOR); if (keyGenerator == null) { throw new IllegalStateException("Key generator was not specified and no key generator was used before."); } } else { slaveState.put(KeyGenerator.KEY_GENERATOR, keyGenerator); } log.info("Using key generator " + keyGenerator.getClass().getName() + PropertyHelper.toString(keyGenerator)); if (valueGenerator == null) { valueGenerator = (ValueGenerator) slaveState.get(ValueGenerator.VALUE_GENERATOR); if (valueGenerator == null) { throw new IllegalStateException("Value generator was not specified and no key generator was used before."); } } else { slaveState.put(ValueGenerator.VALUE_GENERATOR, valueGenerator); } log.info("Using value generator " + valueGenerator.getClass().getName() + PropertyHelper.toString(valueGenerator)); if (cacheSelector == null) { cacheSelector = (CacheSelector) slaveState.get(CacheSelector.CACHE_SELECTOR); if (cacheSelector == null) { throw new IllegalStateException("No cache selector defined."); } } else { slaveState.put(CacheSelector.CACHE_SELECTOR, cacheSelector); } log.info("Using cache selector " + cacheSelector); } }