diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/task/schedule/daemon/DestroyExecutorJob.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/task/schedule/daemon/DestroyExecutorJob.java index d0d5ba91c7..f8a2d035e0 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/task/schedule/daemon/DestroyExecutorJob.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/task/schedule/daemon/DestroyExecutorJob.java @@ -89,6 +89,11 @@ private void destroyExecutor(TaskFrameworkService taskFrameworkService, JobEntit } log.info("Job destroy executor succeed, jobId={}, status={}.", lockedEntity.getId(), lockedEntity.getStatus()); + } else if (lockedEntity.getStatus().isTerminated() && lockedEntity.getExecutorIdentifier() == null) { + // It is necessary to update the finish time when the job is terminated but the + // executorIdentifier is null, otherwise, the job cannot be released. + log.info("Executor not found, updating executor to destroyed,jobId={}", lockedEntity.getId()); + taskFrameworkService.updateExecutorToDestroyed(lockedEntity.getId()); } }); } diff --git a/server/odc-service/src/main/java/com/oceanbase/odc/service/task/service/StdTaskFrameworkService.java b/server/odc-service/src/main/java/com/oceanbase/odc/service/task/service/StdTaskFrameworkService.java index aac765ad42..d581aedb0b 100644 --- a/server/odc-service/src/main/java/com/oceanbase/odc/service/task/service/StdTaskFrameworkService.java +++ b/server/odc-service/src/main/java/com/oceanbase/odc/service/task/service/StdTaskFrameworkService.java @@ -389,6 +389,7 @@ private void doRefreshResult(Long id) throws JobException { taskResultPublisherExecutor.execute(() -> publisher .publishEvent(new JobTerminateEvent(result.getJobIdentity(), result.getStatus()))); + // TODO maybe we can destroy the pod there. if (result.getStatus() == JobStatus.FAILED) { AlarmUtils.alarm(AlarmEventNames.TASK_EXECUTION_FAILED, MessageFormat.format("Job execution failed, jobId={0}",