/** * Construct an endpoint in driver side. * This method will be called by {@link ClientEndpoint}. * @param planStateManager of running plan. * @param clientEndpoint of running plan. */ public DriverEndpoint(final PlanStateManager planStateManager, final ClientEndpoint clientEndpoint) { this.planStateManager = planStateManager; this.clientEndpoint = clientEndpoint; clientEndpoint.connectDriver(this); }
@Override public State getState() { return (State) super.getPlanState(); }
/** * 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; } } }
/** * 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; } } } }