public void run()

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);
  }