From 2272802aec75c5cf1d0c038124ad5fb4ee2b7c9f Mon Sep 17 00:00:00 2001 From: gaoyan Date: Mon, 5 Feb 2024 22:20:51 +0800 Subject: [PATCH] [Fix] Fix UDF task publish NPE (#3144) Co-authored-by: gaoyan1998 --- .../java/org/dinky/data/dto/TaskSaveDTO.java | 3 +++ .../org/dinky/service/impl/TaskServiceImpl.java | 10 ++++++++-- .../src/main/java/org/dinky/utils/UDFUtils.java | 17 ++++++++++++----- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/dinky-admin/src/main/java/org/dinky/data/dto/TaskSaveDTO.java b/dinky-admin/src/main/java/org/dinky/data/dto/TaskSaveDTO.java index a415197a58..0357f67ab6 100644 --- a/dinky-admin/src/main/java/org/dinky/data/dto/TaskSaveDTO.java +++ b/dinky-admin/src/main/java/org/dinky/data/dto/TaskSaveDTO.java @@ -143,6 +143,9 @@ public class TaskSaveDTO { @ApiModelProperty(value = "Statement", dataType = "String", notes = "SQL statement for the task") private String statement; + @ApiModelProperty(value = "Step", dataType = "Integer", example = "1", notes = "Step for the task") + private Integer step; + public Task toTaskEntity() { Task task = new Task(); BeanUtil.copyProperties(this, task); diff --git a/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java b/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java index c099ce604a..fcd3c796dc 100644 --- a/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java +++ b/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java @@ -554,9 +554,15 @@ public boolean changeTaskLifeRecyle(Integer taskId, JobLifeCycle lifeCycle) thro if (lifeCycle == JobLifeCycle.PUBLISH) { Integer taskVersionId = taskVersionService.createTaskVersionSnapshot(task); task.setVersionId(taskVersionId); - UdfCodePool.addOrUpdate(UDFUtils.taskToUDF(task.buildTask())); + if (Dialect.isUDF(task.getDialect())) { + UdfCodePool.addOrUpdate(UDFUtils.taskToUDF(task.buildTask())); + } } else { - UdfCodePool.remove(task.getConfigJson().getUdfConfig().getClassName()); + if (Dialect.isUDF(task.getDialect()) + && Asserts.isNotNull(task.getConfigJson()) + && Asserts.isNotNull(task.getConfigJson().getUdfConfig())) { + UdfCodePool.remove(task.getConfigJson().getUdfConfig().getClassName()); + } } boolean saved = saveOrUpdate(task.buildTask()); if (saved && Asserts.isNotNull(task.getJobInstanceId())) { diff --git a/dinky-admin/src/main/java/org/dinky/utils/UDFUtils.java b/dinky-admin/src/main/java/org/dinky/utils/UDFUtils.java index 07a4687e36..1e771df27e 100644 --- a/dinky-admin/src/main/java/org/dinky/utils/UDFUtils.java +++ b/dinky-admin/src/main/java/org/dinky/utils/UDFUtils.java @@ -19,6 +19,8 @@ package org.dinky.utils; +import org.dinky.assertion.Asserts; +import org.dinky.data.exception.BusException; import org.dinky.data.model.Task; import org.dinky.function.data.model.UDF; import org.dinky.function.util.UDFUtil; @@ -28,10 +30,15 @@ public class UDFUtils extends UDFUtil { public static UDF taskToUDF(Task task) { - return UDF.builder() - .className(task.getConfigJson().getUdfConfig().getClassName()) - .code(task.getStatement()) - .functionLanguage(FunctionLanguage.valueOf(task.getDialect().toUpperCase())) - .build(); + if (Asserts.isNotNull(task.getConfigJson()) + && Asserts.isNotNull(task.getConfigJson().getUdfConfig())) { + return UDF.builder() + .className(task.getConfigJson().getUdfConfig().getClassName()) + .code(task.getStatement()) + .functionLanguage(FunctionLanguage.valueOf(task.getDialect().toUpperCase())) + .build(); + } else { + throw new BusException("udf `class` config is null,please check your udf task config"); + } } }