package org.radargun.stages.cache.background; import java.util.Random; import org.radargun.Operation; import org.radargun.logging.Log; import org.radargun.logging.LogFactory; import org.radargun.stages.cache.generators.KeyGenerator; import org.radargun.traits.BasicOperations; import org.radargun.traits.Transactional; /** * Common operations for all logic types. * * @author Radim Vansa <rvansa@redhat.com> */ public abstract class AbstractLogic implements Logic { protected static final Operation GET_NULL = BasicOperations.GET.derive("Null"); protected final Log log = LogFactory.getLog(getClass()); protected final boolean trace = log.isTraceEnabled(); protected BackgroundOpsManager manager; protected KeyGenerator keyGenerator; protected final int operations; protected final int transactionSize; protected Stressor stressor; protected Transactional.Transaction ongoingTx; protected AbstractLogic(BackgroundOpsManager manager) { this.manager = manager; this.keyGenerator = manager.getKeyGenerator(); this.transactionSize = manager.getGeneralConfiguration().getTransactionSize(); this.operations = manager.getGeneralConfiguration().puts + manager.getGeneralConfiguration().gets + manager.getGeneralConfiguration().removes; } @Override public void finish() { if (transactionSize > 0 && ongoingTx != null) { try { ongoingTx.rollback(); } catch (Exception e) { log.error("Error while ending transaction", e); } } } @Override public void setStressor(Stressor stressor) { this.stressor = stressor; } public Operation getOperation(Random rand) { int r = rand.nextInt(operations); if (r < manager.getGeneralConfiguration().gets) { return BasicOperations.GET; } else if (r < manager.getGeneralConfiguration().gets + manager.getGeneralConfiguration().puts) { return BasicOperations.PUT; } else return BasicOperations.REMOVE; } }