private DistributeJobResult waitForJobCompletion(String workFlowName, String jobName) throws InterruptedException { boolean timeoutEnabled = Boolean.parseBoolean(this.jobPlanningProps.getProperty( GobblinClusterConfigurationKeys.HELIX_JOB_TIMEOUT_ENABLED_KEY, GobblinClusterConfigurationKeys.DEFAULT_HELIX_JOB_TIMEOUT_ENABLED)); long timeoutInSeconds = Long.parseLong(this.jobPlanningProps.getProperty( GobblinClusterConfigurationKeys.HELIX_JOB_TIMEOUT_SECONDS, GobblinClusterConfigurationKeys.DEFAULT_HELIX_JOB_TIMEOUT_SECONDS)); try { HelixUtils.waitJobCompletion( GobblinHelixDistributeJobExecutionLauncher.this.planningJobHelixManager, workFlowName, jobName, timeoutEnabled ? Optional.of(timeoutInSeconds) : Optional.empty()); return getResultFromUserContent(); } catch (TimeoutException te) { HelixUtils.handleJobTimeout(workFlowName, jobName, planningJobHelixManager, this, null); return new DistributeJobResult(false); } }
@Override public DistributeJobResult call() throws Exception { String planningId = getPlanningJobId(this.jobPlanningProps); JobConfig.Builder builder = createJobBuilder(this.jobPlanningProps); try { long submitStartTime = System.currentTimeMillis(); GobblinHelixDistributeJobExecutionLauncher.this.helixMetrics.submitMeter.mark(); submitJobToHelix(planningId, planningId, builder); GobblinHelixDistributeJobExecutionLauncher.this.helixMetrics.updateTimeForHelixSubmit(submitStartTime); long waitStartTime = System.currentTimeMillis(); DistributeJobResult rst = waitForJobCompletion(planningId, planningId); GobblinHelixDistributeJobExecutionLauncher.this.helixMetrics.updateTimeForHelixWait(waitStartTime); return rst; } catch (Exception e) { log.error(planningId + " is not able to submit."); return new DistributeJobResult(false); } } }
@Override public DistributeJobResult call() throws Exception { String planningId = getPlanningJobId(this.jobPlanningProps); JobConfig.Builder builder = createJobBuilder(this.jobPlanningProps); try { submitJobToHelix(planningId, planningId, builder); return waitForJobCompletion(planningId, planningId); } catch (Exception e) { log.error(planningId + " is not able to submit."); return new DistributeJobResult(Optional.empty(), Optional.of(e)); } } }
private DistributeJobResult waitForJobCompletion(String workFlowName, String jobName) throws InterruptedException { boolean timeoutEnabled = Boolean.parseBoolean(this.jobPlanningProps.getProperty(GobblinClusterConfigurationKeys.HELIX_JOB_TIMEOUT_ENABLED_KEY, GobblinClusterConfigurationKeys.DEFAULT_HELIX_JOB_TIMEOUT_ENABLED)); long timeoutInSeconds = Long.parseLong(this.jobPlanningProps.getProperty(GobblinClusterConfigurationKeys.HELIX_JOB_TIMEOUT_SECONDS, GobblinClusterConfigurationKeys.DEFAULT_HELIX_JOB_TIMEOUT_SECONDS)); try { HelixUtils.waitJobCompletion( GobblinHelixDistributeJobExecutionLauncher.this.helixManager, workFlowName, jobName, timeoutEnabled ? Optional.of(timeoutInSeconds) : Optional.empty()); return getResultFromUserContent(); } catch (TimeoutException te) { HelixUtils.handleJobTimeout(workFlowName, jobName, helixManager, this, null); return new DistributeJobResult(Optional.empty(), Optional.of(te)); } }
@VisibleForTesting protected DistributeJobResult getResultFromUserContent() { String planningId = getPlanningJobId(this.jobPlanningProps); try { TaskState taskState = this.stateStores.getTaskStateStore().get(planningId, planningId, planningId); return new DistributeJobResult(Optional.of(taskState.getProperties()), Optional.empty()); } catch (IOException e) { return new DistributeJobResult(Optional.empty(), Optional.of(e)); } }
protected DistributeJobResult getResultFromUserContent() { return new DistributeJobResult(false); }