in computer-k8s-operator/src/main/java/org/apache/hugegraph/computer/k8s/operator/controller/ComputerJobController.java [308:363]
private ComponentState deriveJobStatus(Job job,
List<Pod> pods,
ComponentState oldSate,
int instances,
MutableInt failedComponents,
MutableInt succeededComponents,
MutableInt runningComponents) {
if (job != null && job.getStatus() != null) {
ComponentState newState = new ComponentState();
newState.setName(job.getMetadata().getName());
int succeeded = KubeUtil.intVal(job.getStatus().getSucceeded());
int failed = KubeUtil.intVal(job.getStatus().getFailed());
MatchWithMsg unSchedulable = this.unSchedulable(pods);
MatchWithMsg failedPullImage = this.imagePullBackOff(pods);
if (succeeded >= instances) {
newState.setState(JobComponentState.SUCCEEDED.name());
succeededComponents.increment();
} else if (failed > ALLOW_FAILED_JOBS) {
newState.setState(JobComponentState.FAILED.name());
List<JobCondition> conditions = job.getStatus().getConditions();
if (CollectionUtils.isNotEmpty(conditions)) {
newState.setMessage(conditions.get(0).getMessage());
}
String errorLog = this.getErrorLog(pods);
if (StringUtils.isNotBlank(errorLog)) {
newState.setErrorLog(errorLog);
}
failedComponents.increment();
} else if (unSchedulable.isMatch()) {
newState.setState(JobStatus.FAILED.name());
newState.setMessage(unSchedulable.msg());
failedComponents.increment();
} else if (failedPullImage.isMatch()) {
newState.setState(JobStatus.FAILED.name());
newState.setMessage(failedPullImage.msg());
failedComponents.increment();
} else {
int running = pods.stream().filter(PodStatusUtil::isRunning)
.mapToInt(x -> 1).sum();
int active = running + succeeded;
if (active >= instances) {
newState.setState(JobComponentState.RUNNING.value());
runningComponents.increment();
} else {
newState.setState(JobComponentState.PENDING.value());
}
}
return newState;
} else if (oldSate != null) {
oldSate.setState(JobComponentState.CANCELLED.value());
}
return oldSate;
}