@Override public T startAndWaitForRun(Map<String, String> arguments, ProgramRunStatus status, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { int count = getHistory(status).size(); T manager = start(arguments); waitForRuns(status, count + 1, timeout, timeoutUnit); return manager; }
@Override public T startAndWaitForRun(ProgramRunStatus status, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { return startAndWaitForRun(Collections.emptyMap(), status, timeout, timeoutUnit); }
@Override public void waitForStatus(boolean status) throws InterruptedException { waitForStatus(status, 50, 5000, TimeUnit.MILLISECONDS); }
@Override public boolean isRunning() { // workaround until CDAP-7479 is fixed return super.isRunning() || !getHistory(ProgramRunStatus.RUNNING).isEmpty(); }
@Override public List<RunRecord> getHistory() { return getHistory(ProgramRunStatus.ALL); }
@Override public void waitForRun(ProgramRunStatus status, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { waitForRuns(status, 1, timeout, timeoutUnit); }
@Override public T start() { return start(Collections.emptyMap()); }
@Override public boolean isRunning() { // workaround until CDAP-7479 is fixed return super.isRunning() || !getHistory(ProgramRunStatus.RUNNING).isEmpty(); }
@Override public List<RunRecord> getHistory() { return getHistory(ProgramRunStatus.ALL); }
@Override public void waitForRun(ProgramRunStatus status, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { waitForRuns(status, 1, timeout, timeoutUnit); }
@Override public T start() { return start(Collections.emptyMap()); }
@Override public T startAndWaitForRun(Map<String, String> arguments, ProgramRunStatus status, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { int count = getHistory(status).size(); T manager = start(arguments); waitForRuns(status, count + 1, timeout, timeoutUnit); return manager; }
@Override public boolean isRunning() { // workaround until CDAP-7479 is fixed return super.isRunning() || !getHistory(ProgramRunStatus.RUNNING).isEmpty(); } }
@Override public void waitForStatus(boolean status) throws InterruptedException { waitForStatus(status, 50, 5000, TimeUnit.MILLISECONDS); }
@Override public void waitForRuns(final ProgramRunStatus status, final int runCount, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { Tasks.waitFor(true, () -> getHistory(status).size() >= runCount, timeout, timeoutUnit); }
@Override public T startAndWaitForRun(ProgramRunStatus status, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { return startAndWaitForRun(Collections.emptyMap(), status, timeout, timeoutUnit); }
/** * Waits for the program status. * * @param status true to wait for start, false for stop * @param sleepTime time to sleep in between polling * @param timeout timeout for the polling if the status doesn't match * @param timeoutUnit unit for both sleepTime and timeout */ protected void waitForStatus(boolean status, long sleepTime, long timeout, TimeUnit timeoutUnit) throws InterruptedException { long timeoutMillis = timeoutUnit.toMillis(timeout); boolean statusMatched = status == isRunning(); long startTime = System.currentTimeMillis(); while (!statusMatched && (System.currentTimeMillis() - startTime) < timeoutMillis) { timeoutUnit.sleep(sleepTime); statusMatched = status == isRunning(); } if (!statusMatched) { throw new IllegalStateException(String.format("Program state for '%s' not as expected. Expected '%s'.", programId, status)); } }
@Override public void waitForStatus(boolean status, int retries, int timeout) throws InterruptedException { // The API is not good. The "timeout" parameter is actually sleep time // We calculate the actual timeout by multiplying retries with sleep time long sleepTimeMillis = TimeUnit.SECONDS.toMillis(timeout); long timeoutMillis = sleepTimeMillis * retries; waitForStatus(status, sleepTimeMillis, timeoutMillis, TimeUnit.MILLISECONDS); }
@Override public void waitForRuns(final ProgramRunStatus status, final int runCount, long timeout, TimeUnit timeoutUnit) throws InterruptedException, ExecutionException, TimeoutException { Tasks.waitFor(true, () -> getHistory(status).size() >= runCount, timeout, timeoutUnit); }
/** * Waits for the program status. * * @param status true to wait for start, false for stop * @param sleepTime time to sleep in between polling * @param timeout timeout for the polling if the status doesn't match * @param timeoutUnit unit for both sleepTime and timeout */ protected void waitForStatus(boolean status, long sleepTime, long timeout, TimeUnit timeoutUnit) throws InterruptedException { long timeoutMillis = timeoutUnit.toMillis(timeout); boolean statusMatched = status == isRunning(); long startTime = System.currentTimeMillis(); while (!statusMatched && (System.currentTimeMillis() - startTime) < timeoutMillis) { timeoutUnit.sleep(sleepTime); statusMatched = status == isRunning(); } if (!statusMatched) { throw new IllegalStateException(String.format("Program state for '%s' not as expected. Expected '%s'.", programId, status)); } }