diff --git a/common/util/src/main/java/com/antgroup/openspg/common/util/CommonUtils.java b/common/util/src/main/java/com/antgroup/openspg/common/util/CommonUtils.java index 8d35a83ae..774fd046c 100644 --- a/common/util/src/main/java/com/antgroup/openspg/common/util/CommonUtils.java +++ b/common/util/src/main/java/com/antgroup/openspg/common/util/CommonUtils.java @@ -271,9 +271,10 @@ public static void getScannerReaderConfig( if (reader == null) { reader = new JSONObject(); } - JSONObject builderExtension = JSON.parseObject(job.getExtension()); + JSONObject builderExtension = + job == null ? new JSONObject() : JSON.parseObject(job.getExtension()); JSONObject llm = JSONObject.parseObject(project.getConfig()).getJSONObject(CommonConstants.LLM); - String dataSourceType = job.getDataSourceType(); + String dataSourceType = job == null ? null : job.getDataSourceType(); if (BuilderConstant.YU_QUE.equalsIgnoreCase(dataSourceType)) { scanner.put(BuilderConstant.TYPE, BuilderConstant.YU_QUE); @@ -420,6 +421,9 @@ public static void getScannerReaderConfig( } public static String getKagBuilderInput(BuilderJob builderJob, Date bizDate) { + if (builderJob == null) { + return ""; + } String input = builderJob.getFileUrl(); String dataSourceType = builderJob.getDataSourceType().toLowerCase(); if (BuilderConstant.ODPS.equalsIgnoreCase(dataSourceType)) { diff --git a/server/api/http-server/src/main/java/com/antgroup/openspg/server/api/http/server/openapi/BuilderController.java b/server/api/http-server/src/main/java/com/antgroup/openspg/server/api/http/server/openapi/BuilderController.java index f0e3754bd..eef66359f 100644 --- a/server/api/http-server/src/main/java/com/antgroup/openspg/server/api/http/server/openapi/BuilderController.java +++ b/server/api/http-server/src/main/java/com/antgroup/openspg/server/api/http/server/openapi/BuilderController.java @@ -128,7 +128,18 @@ public void check() { @Override public Boolean action() { - return builderJobService.deleteById(id) > 0; + BuilderJob builderJob = builderJobService.getById(id); + if (builderJob == null) { + return Boolean.FALSE; + } + boolean deleted = builderJobService.deleteById(id) > 0; + // Tear down the linked scheduler job so its DAG instances do not keep + // executing sync tasks against a BuilderJob that no longer exists. + // Otherwise reader/retrieval sync tasks dereference a null BuilderJob (see #732). + if (deleted && builderJob.getTaskId() != null) { + schedulerService.deleteJob(builderJob.getTaskId()); + } + return deleted; } }); } diff --git a/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/KagReaderSyncTask.java b/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/KagReaderSyncTask.java index 010b0e6c4..37d3db4f2 100644 --- a/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/KagReaderSyncTask.java +++ b/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/KagReaderSyncTask.java @@ -48,6 +48,10 @@ public class KagReaderSyncTask extends SyncTaskExecuteTemplate { public SchedulerEnum.TaskStatus submit(TaskExecuteContext context) { SchedulerJob job = context.getJob(); BuilderJob builderJob = builderJobService.getById(Long.valueOf(job.getInvokerId())); + if (builderJob == null) { + context.addTraceLog("builderJob %s not found, skip reader", job.getInvokerId()); + return SchedulerEnum.TaskStatus.FINISH; + } List chunks = readSource(context, builderJob); SchedulerTask task = context.getTask(); String fileKey = diff --git a/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/RetrievalSyncTask.java b/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/RetrievalSyncTask.java index 41279dc68..4adc78b29 100644 --- a/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/RetrievalSyncTask.java +++ b/server/core/scheduler/service/src/main/java/com/antgroup/openspg/server/core/scheduler/service/task/sync/builder/RetrievalSyncTask.java @@ -69,6 +69,10 @@ public SchedulerEnum.TaskStatus submit(TaskExecuteContext context) { SchedulerJob job = context.getJob(); BuilderJob builderJob = builderJobService.getById(Long.valueOf(job.getInvokerId())); + if (builderJob == null) { + context.addTraceLog("builderJob %s not found, skip retrieval", job.getInvokerId()); + return SchedulerEnum.TaskStatus.FINISH; + } String retrievals = builderJob.getRetrievals(); if (StringUtils.isBlank(retrievals)) { context.addTraceLog("index not set"); @@ -79,6 +83,10 @@ public SchedulerEnum.TaskStatus submit(TaskExecuteContext context) { Project project = projectService.queryById(job.getProjectId()); for (Long id : retrievalList) { Retrieval retrieval = retrievalService.getById(id); + if (retrieval == null) { + context.addTraceLog("retrieval %s not found, skip", id); + continue; + } context.addTraceLog("update index(%s) schema", retrieval.getName()); String schemaDesc = retrieval.getSchemaDesc(); if (StringUtils.isBlank(schemaDesc)) {