private ComponentState deriveJobStatus()

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;
    }