package org.radargun.stages.cache.background; import org.radargun.logging.Log; import org.radargun.logging.LogFactory; import org.radargun.stats.BasicOperationStats; import org.radargun.stats.SynchronizedStatistics; /** * Stressor thread running in parallel to many stages. Its behavior is specified by plugging in specific * {@link org.radargun.stages.cache.background.Logic} implementation. * * @See org.radargun.stages.cache.background.BackgroundStressorLogic * @See org.radargun.stages.cache.background.PrivateLogLogic * @See org.radargun.stages.cache.background.SharedLogLogic * * @author Radim Vansa <rvansa@redhat.com> */ class Stressor extends Thread { private static final Log log = LogFactory.getLog(Stressor.class); protected final int id; private final Logic logic; private final long delayBetweenRequests; protected final SynchronizedStatistics stats = new SynchronizedStatistics(new BasicOperationStats()); private volatile boolean terminate = false; public Stressor(BackgroundOpsManager manager, Logic logic, int id) { super(manager.getName() + "Stressor-" + id); GeneralConfiguration config = manager.getGeneralConfiguration(); this.id = manager.getSlaveState().getIndexInGroup() * config.getNumThreads() + id; this.logic = logic; this.delayBetweenRequests = config.getDelayBetweenRequests(); logic.setStressor(this); stats.begin(); } @Override public void run() { try { logic.init(); while (!isInterrupted() && !terminate) { logic.invoke(); if (delayBetweenRequests > 0) sleep(delayBetweenRequests); } } catch (InterruptedException e) { log.trace("Stressor interrupted.", e); interrupt(); } finally { logic.finish(); } } public void requestTerminate() { terminate = true; } public boolean isTerminated() { return terminate; } public SynchronizedStatistics getStatsSnapshot(boolean reset) { return stats.snapshot(reset); } public String getStatus() { return String.format("%s [id=%d, terminated=%s]: %s [%s]", getName(), id, terminate, logic.getClass().getSimpleName(), logic.getStatus()); } public Logic getLogic() { return logic; } }