in src/main/java/com/uber/cadence/testing/WorkflowShadower.java [97:146]
public void run() throws Throwable {
byte[] nextPageToken = null;
int replayCount = 0;
int maxReplayCount = Integer.MAX_VALUE;
Duration maxReplayDuration = Duration.ZERO;
ZonedDateTime now = ZonedDateTime.now();
if (options.getExitCondition() != null) {
if (options.getExitCondition().getShadowCount() != 0) {
maxReplayCount = options.getExitCondition().getShadowCount();
}
if (options.getExitCondition().getExpirationIntervalInSeconds() != 0) {
maxReplayDuration =
Duration.ofSeconds(options.getExitCondition().getExpirationIntervalInSeconds());
}
}
do {
ScanWorkflowActivityParams params = new ScanWorkflowActivityParams();
params.setDomain(options.getDomain());
params.setWorkflowQuery(query);
params.setSamplingRate(options.getSamplingRate());
params.setNextPageToken(nextPageToken);
ScanWorkflowActivityResult scanResult = scanWorkflow.scan(params);
nextPageToken = scanResult.getNextPageToken();
for (WorkflowExecution execution : scanResult.getExecutions()) {
ReplayWorkflowActivityResult replayResult =
replayWorkflow.replayOneExecution(options.getDomain(), execution);
if (replayResult.getFailed() > 0) {
throw new Error("Replay workflow history failed with execution:" + execution.toString());
} else if (replayResult.getSucceeded() > 0) {
replayCount++;
}
// Check exit condition
if (replayCount >= maxReplayCount) {
return;
}
if (!maxReplayDuration.isZero()
&& ZonedDateTime.now().isAfter(now.plusSeconds(maxReplayDuration.getSeconds()))) {
return;
}
}
if (nextPageToken == null && options.getShadowMode() == Mode.Continuous) {
Thread.sleep(SLEEP_INTERVAL);
}
} while (nextPageToken != null && options.getShadowMode() == Mode.Normal);
}