package org.radargun.stages.control; import java.util.List; import java.util.Objects; import java.util.Stack; import org.radargun.DistStageAck; import org.radargun.StageResult; import org.radargun.config.Label; import org.radargun.config.Stage; import org.radargun.state.StateBase; /** * @author Radim Vansa <rvansa@redhat.com> */ @Stage(internal = true, doc = "DO NOT USE DIRECTLY. This stage is added at the end of each repeat.", label = @Label(prefix = "repeat", suffix = "end")) public class RepeatEndStage extends RepeatStage { @Override public DistStageAck executeOnSlave() { updateState(slaveState); return successfulResponse(); } private void updateState(StateBase state) { String counterName = getCounterName(); log.trace("Removing counter " + counterName); state.remove(counterName); Stack<String> repeatNames = (Stack<String>) state.get(RepeatStage.REPEAT_NAMES); if (repeatNames == null || repeatNames.isEmpty() || !Objects.equals(repeatNames.peek(), name)) { throw new IllegalStateException("Cannot unwind repeat: " + repeatNames); } repeatNames.pop(); } @Override public StageResult processAckOnMaster(List<DistStageAck> acks) { updateState(masterState); return StageResult.SUCCESS; } }