/** * Get the current state of the running plan. * * @return the current state of the running plan. */ public final synchronized Enum getPlanState() { if (driverEndpoint.get() != null) { return stateTranslator.translateState(driverEndpoint.get().getState()); } else { return stateTranslator.translateState(PlanState.State.READY); } }
/** * Wait for this job to be finished and return the final state. * * @return the final state of this job. */ public final Enum waitUntilJobFinish() { if (driverEndpoint.get() != null) { return stateTranslator.translateState(driverEndpoint.get().waitUntilFinish()); } else { // The driver endpoint is not connected yet. final boolean driverIsConnected = waitUntilConnected(); if (driverIsConnected) { return stateTranslator.translateState(driverEndpoint.get().waitUntilFinish()); } else { return PlanState.State.READY; } } } }
/** * Wait for this job to be finished (complete or failed) and return the final state. * It wait for at most the given time. * * @param timeout of waiting. * @param unit of the timeout. * @return the final state of this job. */ public final Enum waitUntilJobFinish(final long timeout, final TimeUnit unit) { if (driverEndpoint.get() != null) { return stateTranslator.translateState(driverEndpoint.get().waitUntilFinish(timeout, unit)); } else { // The driver endpoint is not connected yet. final long currentNano = System.nanoTime(); final boolean driverIsConnected; if (DEFAULT_DRIVER_WAIT_IN_MILLIS < unit.toMillis(timeout)) { driverIsConnected = waitUntilConnected(DEFAULT_DRIVER_WAIT_IN_MILLIS, TimeUnit.MILLISECONDS); } else { driverIsConnected = waitUntilConnected(timeout, unit); } if (driverIsConnected) { final long consumedTime = System.nanoTime() - currentNano; return stateTranslator.translateState(driverEndpoint.get(). waitUntilFinish(timeout - unit.convert(consumedTime, TimeUnit.NANOSECONDS), unit)); } else { return PlanState.State.READY; } } }