private void executionEnded( GridProcess execution, GridProcessState state, List<IResponseTO> responses) { updateExecution(execution, state, responses); if (hasJobEnded(execution.getJob())) { finishJob(execution.getJob(), responses); } updateScheduler(responses); }
private void updateExecution( GridProcess execution, GridProcessState state, List<IResponseTO> responses) { try { execution .getJob() .newReplicaResult( execution.getResult(), state, verifyFailure(execution.getTask(), state), canReplicate(execution.getTask())); } catch (IllegalResultException e) { responses.add( new LoggerResponseTO( "Illegal result on replicaEnded: " + e.getMessage(), LoggerResponseTO.ERROR)); } if (state.equals(GridProcessState.FINISHED)) { abortReplicaSisters(execution, responses); } WorkerEntry workerEntry = execution.getWorkerEntry(); workerEntry.deallocate(); if (!isWorkerNeeded(workerEntry, execution)) { disposeWorker(workerEntry, responses); } }
public void executionFailed(GridProcess execution, List<IResponseTO> responses) { reportReplicaAccounting(execution, responses); Job job = execution.getJob(); GridProcessExecutionResult executionResult = execution.getResult(); try { job.newReplicaResult( executionResult, GridProcessState.FAILED, verifyFailure(execution.getTask(), GridProcessState.FAILED), canReplicate(execution.getTask())); } catch (IllegalResultException e) { responses.add( new LoggerResponseTO( "Illegal result on replica " + execution.getState() + " : " + e.getMessage(), LoggerResponseTO.ERROR)); } GridProcessHandle handle = executionResult.getReplicaHandle(); WorkerEntry workerEntry = execution.getWorkerEntry(); workerEntry.deallocate(); GridProcessErrorTypes type = null; if (executionResult != null && executionResult.getExecutionError() != null) { type = executionResult.getExecutionError().getType(); } boolean enteredTaskBlacklist = executionFailedOnWorker(workerEntry, type, execution, responses); if (enteredTaskBlacklist) { if (!isWorkerNeeded(workerEntry, execution)) { unwantWorker(job, workerEntry, responses); } } else { disposeWorker(workerEntry, responses); } boolean hasJobEnded = hasJobEnded(job); String executorMsg = ""; if (executionResult != null && executionResult.getExecutionError() != null && executionResult.getExecutionError().getErrorCause() != null) { executorMsg = executionResult.getExecutionError().getErrorCause().toString(); } responses.add( new LoggerResponseTO( "Grid process " + execution.getState() + " " + handle + ". Job ended: " + hasJobEnded + " " + executorMsg + ".", LoggerResponseTO.DEBUG)); if (hasJobEnded) { finishJob(execution.getJob(), responses); } if (!isJobSatisfied(job) && !hasJobEnded) { Request request = execution.getJob().getRequest(workerEntry.getRequestID()); if (request != null) { request.setPaused(false); } ResumeRequestResponseTO to = new ResumeRequestResponseTO(); to.setPeerAddress(StringUtil.deploymentIDToAddress(workerEntry.getPeerID())); to.setRequestID(workerEntry.getRequestID()); responses.add(to); } updateScheduler(responses); }
private boolean isWorkerNeeded(WorkerEntry workerEntry, GridProcess execution) { Job job = execution.getJob(); return isWorkerBlacklistedForEntireJob(workerEntry, job) || isJobSatisfied(job) ? false : true; }