From 5739b9e713ae56be545f5da3a81c7c9b2d38fbe4 Mon Sep 17 00:00:00 2001 From: wenmo <32723967+wenmo@users.noreply.github.com> Date: Fri, 12 Jan 2024 21:09:15 +0800 Subject: [PATCH 1/3] [Feature-15475][DinkyTask] DinkyTask supports Dinky-1.0.0 and common sql --- .../plugin/task/dinky/DinkyTask.java | 273 ++++++++++++++---- .../plugin/task/dinky/DinkyTaskConstants.java | 9 + .../public/images/task-icons/dinky.png | Bin 6447 -> 43671 bytes .../public/images/task-icons/dinky_hover.png | Bin 6330 -> 53193 bytes 4 files changed, 231 insertions(+), 51 deletions(-) diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java index 694317122e9c..a3388bc130d3 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java @@ -25,6 +25,7 @@ import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; import org.apache.dolphinscheduler.plugin.task.api.TaskException; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.model.Property; import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; import org.apache.commons.lang3.StringUtils; @@ -44,6 +45,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import lombok.extern.slf4j.Slf4j; @@ -51,6 +53,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.MissingNode; +import com.fasterxml.jackson.databind.node.NullNode; @Slf4j public class DinkyTask extends AbstractRemoteTask { @@ -58,6 +61,9 @@ public class DinkyTask extends AbstractRemoteTask { private final TaskExecutionContext taskExecutionContext; private DinkyParameters dinkyParameters; + private String jobInstanceId; + private boolean status; + private String dinkyVersion; protected DinkyTask(TaskExecutionContext taskExecutionContext) { super(taskExecutionContext); @@ -79,73 +85,190 @@ public void init() { } } - // todo split handle to submit and track @Override public void handle(TaskCallBack taskCallBack) throws TaskException { - try { + // Get dinky version + dinkyVersion = getDinkyVersion(this.dinkyParameters.getAddress()); + super.handle(taskCallBack); + } + + @Override + public void submitApplication() throws TaskException { + if (dinkyVersion.startsWith("0")) { + submitApplicationV0(); + } else { + submitApplicationV1(); + } + } + + @Override + public void trackApplicationStatus() throws TaskException { + if (dinkyVersion.startsWith("0")) { + trackApplicationStatusV0(); + } else { + trackApplicationStatusV1(); + } + } + private void submitApplicationV0() { + try { String address = this.dinkyParameters.getAddress(); String taskId = this.dinkyParameters.getTaskId(); boolean isOnline = this.dinkyParameters.isOnline(); JsonNode result; + String API_RESULT_DATAS = DinkyTaskConstants.API_RESULT_DATAS; if (isOnline) { - // Online dinky task, and only one job is allowed to execute - result = onlineTask(address, taskId); + // Online dinky-0.6.5 task, and only one job is allowed to execute + result = onlineTaskV0(address, taskId); } else { - // Submit dinky task - result = submitTask(address, taskId); + // Submit dinky-0.6.5 task + result = submitTaskV0(address, taskId); } - if (checkResult(result)) { - boolean status = result.get(DinkyTaskConstants.API_RESULT_DATAS).get("success").asBoolean(); - String jobInstanceId = result.get(DinkyTaskConstants.API_RESULT_DATAS).get("jobInstanceId").asText(); - boolean finishFlag = false; - while (!finishFlag) { - JsonNode jobInstanceInfoResult = getJobInstanceInfo(address, jobInstanceId); - if (!checkResult(jobInstanceInfoResult)) { - break; - } - String jobInstanceStatus = - jobInstanceInfoResult.get(DinkyTaskConstants.API_RESULT_DATAS).get("status").asText(); - switch (jobInstanceStatus) { - case DinkyTaskConstants.STATUS_FINISHED: - final int exitStatusCode = mapStatusToExitCode(status); - // Use address-taskId as app id - setAppIds(String.format("%s-%s", address, taskId)); - setExitStatusCode(exitStatusCode); - log.info("dinky task finished with results: {}", - result.get(DinkyTaskConstants.API_RESULT_DATAS)); - finishFlag = true; - break; - case DinkyTaskConstants.STATUS_FAILED: - case DinkyTaskConstants.STATUS_CANCELED: - case DinkyTaskConstants.STATUS_UNKNOWN: - errorHandle(jobInstanceInfoResult.get(DinkyTaskConstants.API_RESULT_DATAS).get("error") - .asText()); - finishFlag = true; - break; - default: - Thread.sleep(DinkyTaskConstants.SLEEP_MILLIS); - } + if (checkResultV0(result)) { + status = result.get(API_RESULT_DATAS).get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean(); + if (result.get(API_RESULT_DATAS).has(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) + && !(result.get(API_RESULT_DATAS) + .get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) instanceof NullNode)) { + jobInstanceId = + result.get(API_RESULT_DATAS).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); } } - } catch (InterruptedException ex) { + } catch (Exception ex) { Thread.currentThread().interrupt(); - log.error("Execute dinkyTask failed", ex); + log.error("Submit dinkyTask failed", ex); setExitStatusCode(EXIT_CODE_FAILURE); - throw new TaskException("Execute dinkyTask failed", ex); + throw new TaskException("Submit dinkyTask failed", ex); } } - @Override - public void submitApplication() throws TaskException { + private void submitApplicationV1() { + try { + String address = this.dinkyParameters.getAddress(); + String taskId = this.dinkyParameters.getTaskId(); + boolean isOnline = this.dinkyParameters.isOnline(); + JsonNode result; + String API_RESULT_DATA = DinkyTaskConstants.API_RESULT_DATA; + // Submit dinky-1.0.0 task + result = submitTaskV1(address, taskId, isOnline, generateVariables()); + if (checkResultV1(result)) { + status = result.get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean(); + if (result.get(API_RESULT_DATA).has(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) + && !(result.get(API_RESULT_DATA) + .get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) instanceof NullNode)) { + jobInstanceId = + result.get(API_RESULT_DATA).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); + } + } else { + log.error("Submit dinkyTask failed: {}", result.get(DinkyTaskConstants.API_RESULT_MSG)); + setExitStatusCode(EXIT_CODE_FAILURE); + throw new TaskException("Submit dinkyTask failed: " + result.get(DinkyTaskConstants.API_RESULT_MSG)); + } + } catch (Exception ex) { + Thread.currentThread().interrupt(); + log.error("Submit dinkyTask failed", ex); + setExitStatusCode(EXIT_CODE_FAILURE); + throw new TaskException("Submit dinkyTask failed", ex); + } + } + public void trackApplicationStatusV0() throws TaskException { + try { + String address = this.dinkyParameters.getAddress(); + String taskId = this.dinkyParameters.getTaskId(); + if (status && jobInstanceId == null) { + // Use address-taskId as app id + setAppIds(String.format("%s-%s", address, taskId)); + setExitStatusCode(mapStatusToExitCode(true)); + log.info("Dinky common sql task finished."); + return; + } + String API_RESULT_DATAS = DinkyTaskConstants.API_RESULT_DATAS; + boolean finishFlag = false; + while (!finishFlag) { + JsonNode jobInstanceInfoResult = getJobInstanceInfo(address, jobInstanceId); + if (!checkResultV0(jobInstanceInfoResult)) { + break; + } + String jobInstanceStatus = + jobInstanceInfoResult.get(API_RESULT_DATAS).get("status").asText(); + switch (jobInstanceStatus) { + case DinkyTaskConstants.STATUS_FINISHED: + final int exitStatusCode = mapStatusToExitCode(status); + // Use address-taskId as app id + setAppIds(String.format("%s-%s", address, taskId)); + setExitStatusCode(exitStatusCode); + log.info("dinky task finished with results: {}", + jobInstanceInfoResult.get(API_RESULT_DATAS)); + finishFlag = true; + break; + case DinkyTaskConstants.STATUS_FAILED: + case DinkyTaskConstants.STATUS_CANCELED: + case DinkyTaskConstants.STATUS_UNKNOWN: + errorHandle(jobInstanceInfoResult.get(API_RESULT_DATAS).get(DinkyTaskConstants.API_RESULT_ERROR) + .asText()); + finishFlag = true; + break; + default: + Thread.sleep(DinkyTaskConstants.SLEEP_MILLIS); + } + } + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + log.error("Track dinkyTask failed", ex); + setExitStatusCode(EXIT_CODE_FAILURE); + throw new TaskException("Track dinkyTask failed", ex); + } } - @Override - public void trackApplicationStatus() throws TaskException { + public void trackApplicationStatusV1() throws TaskException { + try { + String address = this.dinkyParameters.getAddress(); + String taskId = this.dinkyParameters.getTaskId(); + if (status && jobInstanceId == null) { + // Use address-taskId as app id + setAppIds(String.format("%s-%s", address, taskId)); + setExitStatusCode(mapStatusToExitCode(true)); + log.info("Dinky common sql task finished."); + return; + } + String API_RESULT_DATA = DinkyTaskConstants.API_RESULT_DATA; + boolean finishFlag = false; + while (!finishFlag) { + JsonNode jobInstanceInfoResult = getJobInstanceInfo(address, jobInstanceId); + if (!checkResultV1(jobInstanceInfoResult)) { + break; + } + String jobInstanceStatus = + jobInstanceInfoResult.get(API_RESULT_DATA).get("status").asText(); + switch (jobInstanceStatus) { + case DinkyTaskConstants.STATUS_FINISHED: + final int exitStatusCode = mapStatusToExitCode(status); + // Use address-taskId as app id + setAppIds(String.format("%s-%s", address, taskId)); + setExitStatusCode(exitStatusCode); + log.info("dinky task finished with results: {}", + jobInstanceInfoResult.get(API_RESULT_DATA)); + finishFlag = true; + break; + case DinkyTaskConstants.STATUS_FAILED: + case DinkyTaskConstants.STATUS_CANCELED: + case DinkyTaskConstants.STATUS_UNKNOWN: + errorHandle(jobInstanceInfoResult.get(API_RESULT_DATA).get(DinkyTaskConstants.API_RESULT_ERROR) + .asText()); + finishFlag = true; + break; + default: + Thread.sleep(DinkyTaskConstants.SLEEP_MILLIS); + } + } + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + log.error("Track dinkyTask failed", ex); + setExitStatusCode(EXIT_CODE_FAILURE); + throw new TaskException("Track dinkyTask failed", ex); + } } - /** * map dinky task status to exitStatusCode * @@ -160,12 +283,23 @@ private int mapStatusToExitCode(boolean status) { } } - private boolean checkResult(JsonNode result) { - if (result instanceof MissingNode || result == null) { + private boolean checkResultV0(JsonNode result) { + if (result instanceof MissingNode || result instanceof NullNode) { errorHandle(DinkyTaskConstants.API_VERSION_ERROR_TIPS); return false; - } else if (result.get("code").asInt() == DinkyTaskConstants.API_ERROR) { - errorHandle(result.get("msg")); + } else if (result.get(DinkyTaskConstants.API_RESULT_CODE).asInt() == DinkyTaskConstants.API_ERROR) { + errorHandle(result.get(DinkyTaskConstants.API_RESULT_MSG)); + return false; + } + return true; + } + + private boolean checkResultV1(JsonNode result) { + if (result instanceof MissingNode || result instanceof NullNode) { + errorHandle(DinkyTaskConstants.API_VERSION_ERROR_TIPS); + return false; + } else if (!result.get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean()) { + errorHandle(result.get(DinkyTaskConstants.API_RESULT_MSG)); return false; } return true; @@ -196,18 +330,54 @@ public void cancelApplication() throws TaskException { taskId); } - private JsonNode submitTask(String address, String taskId) { + private Map generateVariables() { + Map variables = new ConcurrentHashMap<>(); + List propertyList = JSONUtils.toList(taskExecutionContext.getGlobalParams(), Property.class); + if (propertyList != null && !propertyList.isEmpty()) { + for (Property property : propertyList) { + variables.put(property.getProp(), property.getValue()); + } + } + List localParams = this.dinkyParameters.getLocalParams(); + if (localParams == null || localParams.isEmpty()) { + return variables; + } + for (Property property : localParams) { + variables.put(property.getProp(), property.getValue()); + } + return variables; + } + + private String getDinkyVersion(String address) { + JsonNode versionJsonNode = parse(doGet(address + DinkyTaskConstants.GET_VERSION, new HashMap<>())); + if (versionJsonNode instanceof MissingNode || versionJsonNode == null) { + return "0"; + } else if (versionJsonNode.get(DinkyTaskConstants.API_RESULT_CODE).asInt() == DinkyTaskConstants.API_ERROR) { + return "0"; + } + return versionJsonNode.get(DinkyTaskConstants.API_RESULT_DATA).asText(); + } + + private JsonNode submitTaskV0(String address, String taskId) { Map params = new HashMap<>(); params.put(DinkyTaskConstants.PARAM_TASK_ID, taskId); return parse(doGet(address + DinkyTaskConstants.SUBMIT_TASK, params)); } - private JsonNode onlineTask(String address, String taskId) { + private JsonNode onlineTaskV0(String address, String taskId) { Map params = new HashMap<>(); params.put(DinkyTaskConstants.PARAM_TASK_ID, taskId); return parse(doGet(address + DinkyTaskConstants.ONLINE_TASK, params)); } + private JsonNode submitTaskV1(String address, String taskId, boolean isOnline, Map variables) { + Map params = new HashMap<>(); + params.put(DinkyTaskConstants.PARAM_TASK_ID, taskId); + params.put(DinkyTaskConstants.PARAM_TASK_IS_ONLINE, isOnline); + params.put(DinkyTaskConstants.PARAM_TASK_VARIABLES, variables); + return parse(sendJsonStr(address + DinkyTaskConstants.SUBMIT_TASK, JSONUtils.toJsonString(params))); + } + private JsonNode cancelTask(String address, String taskId) { Map params = new HashMap<>(); params.put(DinkyTaskConstants.PARAM_JSON_TASK_ID, taskId); @@ -289,4 +459,5 @@ private String sendJsonStr(String url, String params) { } return result; } + } diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java index 8b12b8c259be..ca270103e60d 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java @@ -27,6 +27,7 @@ private DinkyTaskConstants() { } private static final String API_ROUTE = "/openapi/"; + public static final String GET_VERSION = API_ROUTE + "version"; public static final String SUBMIT_TASK = API_ROUTE + "submitTask"; public static final String ONLINE_TASK = API_ROUTE + "onLineTask"; public static final String SAVEPOINT_TASK = API_ROUTE + "savepointTask"; @@ -34,11 +35,19 @@ private DinkyTaskConstants() { public static final int API_ERROR = 1; public static final String API_VERSION_ERROR_TIPS = "Please check that the dinky version is greater than or equal to 0.6.5"; + public static final String API_RESULT_CODE = "code"; + public static final String API_RESULT_SUCCESS = "success"; + public static final String API_RESULT_MSG = "msg"; + public static final String API_RESULT_ERROR = "error"; + public static final String API_RESULT_DATA = "data"; public static final String API_RESULT_DATAS = "datas"; + public static final String API_RESULT_JOB_INSTANCE_ID = "jobInstanceId"; public static final String SAVEPOINT_CANCEL = "cancel"; public static final String PARAM_TASK_ID = "id"; + public static final String PARAM_TASK_IS_ONLINE = "isOnline"; + public static final String PARAM_TASK_VARIABLES = "variables"; public static final String PARAM_JSON_TASK_ID = "taskId"; public static final String PARAM_SAVEPOINT_TYPE = "type"; public static final String PARAM_JOB_INSTANCE_ID = "id"; diff --git a/dolphinscheduler-ui/public/images/task-icons/dinky.png b/dolphinscheduler-ui/public/images/task-icons/dinky.png index 7f4ad3997b65d74c7711f361ef09755035410001..ad1aba9b2086313fb0ac6a40425ba1f006b2c251 100644 GIT binary patch literal 43671 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 literal 6447 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 O0+u3pM2&mS8z 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 Z95J2Xdh3>&NeTomH{@yO3a5a-{s#oRdj|jj literal 6330 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 F{{fM&KPmtK From ae8f89491f02eb6e1138e0afb06434104e59116a Mon Sep 17 00:00:00 2001 From: wenmo <32723967+wenmo@users.noreply.github.com> Date: Sun, 14 Jan 2024 23:57:35 +0800 Subject: [PATCH 2/3] Fix isue --- .../plugin/task/dinky/DinkyTask.java | 69 ++++++++++--------- .../plugin/task/dinky/DinkyTaskConstants.java | 4 ++ 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java index a3388bc130d3..f8e134e11b58 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java @@ -116,7 +116,7 @@ private void submitApplicationV0() { String taskId = this.dinkyParameters.getTaskId(); boolean isOnline = this.dinkyParameters.isOnline(); JsonNode result; - String API_RESULT_DATAS = DinkyTaskConstants.API_RESULT_DATAS; + String apiResultDatasKey = DinkyTaskConstants.API_RESULT_DATAS; if (isOnline) { // Online dinky-0.6.5 task, and only one job is allowed to execute result = onlineTaskV0(address, taskId); @@ -125,19 +125,19 @@ private void submitApplicationV0() { result = submitTaskV0(address, taskId); } if (checkResultV0(result)) { - status = result.get(API_RESULT_DATAS).get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean(); - if (result.get(API_RESULT_DATAS).has(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) - && !(result.get(API_RESULT_DATAS) + status = result.get(apiResultDatasKey).get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean(); + if (result.get(apiResultDatasKey).has(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) + && !(result.get(apiResultDatasKey) .get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) instanceof NullNode)) { jobInstanceId = - result.get(API_RESULT_DATAS).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); + result.get(apiResultDatasKey).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); } } } catch (Exception ex) { Thread.currentThread().interrupt(); - log.error("Submit dinkyTask failed", ex); + log.error(DinkyTaskConstants.SUBMIT_FAILED_MSG, ex); setExitStatusCode(EXIT_CODE_FAILURE); - throw new TaskException("Submit dinkyTask failed", ex); + throw new TaskException(DinkyTaskConstants.SUBMIT_FAILED_MSG, ex); } } @@ -159,15 +159,16 @@ private void submitApplicationV1() { result.get(API_RESULT_DATA).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); } } else { - log.error("Submit dinkyTask failed: {}", result.get(DinkyTaskConstants.API_RESULT_MSG)); + log.error(DinkyTaskConstants.SUBMIT_FAILED_MSG + "{}", result.get(DinkyTaskConstants.API_RESULT_MSG)); setExitStatusCode(EXIT_CODE_FAILURE); - throw new TaskException("Submit dinkyTask failed: " + result.get(DinkyTaskConstants.API_RESULT_MSG)); + throw new TaskException( + DinkyTaskConstants.SUBMIT_FAILED_MSG + result.get(DinkyTaskConstants.API_RESULT_MSG)); } } catch (Exception ex) { Thread.currentThread().interrupt(); - log.error("Submit dinkyTask failed", ex); + log.error(DinkyTaskConstants.SUBMIT_FAILED_MSG, ex); setExitStatusCode(EXIT_CODE_FAILURE); - throw new TaskException("Submit dinkyTask failed", ex); + throw new TaskException(DinkyTaskConstants.SUBMIT_FAILED_MSG, ex); } } @@ -177,12 +178,12 @@ public void trackApplicationStatusV0() throws TaskException { String taskId = this.dinkyParameters.getTaskId(); if (status && jobInstanceId == null) { // Use address-taskId as app id - setAppIds(String.format("%s-%s", address, taskId)); + setAppIds(String.format(DinkyTaskConstants.APPIDS_FORMAT, address, taskId)); setExitStatusCode(mapStatusToExitCode(true)); log.info("Dinky common sql task finished."); return; } - String API_RESULT_DATAS = DinkyTaskConstants.API_RESULT_DATAS; + String apiResultDatasKey = DinkyTaskConstants.API_RESULT_DATAS; boolean finishFlag = false; while (!finishFlag) { JsonNode jobInstanceInfoResult = getJobInstanceInfo(address, jobInstanceId); @@ -190,22 +191,23 @@ public void trackApplicationStatusV0() throws TaskException { break; } String jobInstanceStatus = - jobInstanceInfoResult.get(API_RESULT_DATAS).get("status").asText(); + jobInstanceInfoResult.get(apiResultDatasKey).get("status").asText(); switch (jobInstanceStatus) { case DinkyTaskConstants.STATUS_FINISHED: final int exitStatusCode = mapStatusToExitCode(status); // Use address-taskId as app id - setAppIds(String.format("%s-%s", address, taskId)); + setAppIds(String.format(DinkyTaskConstants.APPIDS_FORMAT, address, taskId)); setExitStatusCode(exitStatusCode); log.info("dinky task finished with results: {}", - jobInstanceInfoResult.get(API_RESULT_DATAS)); + jobInstanceInfoResult.get(apiResultDatasKey)); finishFlag = true; break; case DinkyTaskConstants.STATUS_FAILED: case DinkyTaskConstants.STATUS_CANCELED: case DinkyTaskConstants.STATUS_UNKNOWN: - errorHandle(jobInstanceInfoResult.get(API_RESULT_DATAS).get(DinkyTaskConstants.API_RESULT_ERROR) - .asText()); + errorHandle( + jobInstanceInfoResult.get(apiResultDatasKey).get(DinkyTaskConstants.API_RESULT_ERROR) + .asText()); finishFlag = true; break; default: @@ -214,9 +216,9 @@ public void trackApplicationStatusV0() throws TaskException { } } catch (InterruptedException ex) { Thread.currentThread().interrupt(); - log.error("Track dinkyTask failed", ex); + log.error(DinkyTaskConstants.TRACK_FAILED_MSG, ex); setExitStatusCode(EXIT_CODE_FAILURE); - throw new TaskException("Track dinkyTask failed", ex); + throw new TaskException(DinkyTaskConstants.TRACK_FAILED_MSG, ex); } } @@ -227,7 +229,7 @@ public void trackApplicationStatusV1() throws TaskException { String taskId = this.dinkyParameters.getTaskId(); if (status && jobInstanceId == null) { // Use address-taskId as app id - setAppIds(String.format("%s-%s", address, taskId)); + setAppIds(String.format(DinkyTaskConstants.APPIDS_FORMAT, address, taskId)); setExitStatusCode(mapStatusToExitCode(true)); log.info("Dinky common sql task finished."); return; @@ -245,7 +247,7 @@ public void trackApplicationStatusV1() throws TaskException { case DinkyTaskConstants.STATUS_FINISHED: final int exitStatusCode = mapStatusToExitCode(status); // Use address-taskId as app id - setAppIds(String.format("%s-%s", address, taskId)); + setAppIds(String.format(DinkyTaskConstants.APPIDS_FORMAT, address, taskId)); setExitStatusCode(exitStatusCode); log.info("dinky task finished with results: {}", jobInstanceInfoResult.get(API_RESULT_DATA)); @@ -264,9 +266,9 @@ public void trackApplicationStatusV1() throws TaskException { } } catch (InterruptedException ex) { Thread.currentThread().interrupt(); - log.error("Track dinkyTask failed", ex); + log.error(DinkyTaskConstants.TRACK_FAILED_MSG, ex); setExitStatusCode(EXIT_CODE_FAILURE); - throw new TaskException("Track dinkyTask failed", ex); + throw new TaskException(DinkyTaskConstants.TRACK_FAILED_MSG, ex); } } /** @@ -284,25 +286,27 @@ private int mapStatusToExitCode(boolean status) { } private boolean checkResultV0(JsonNode result) { + boolean isCorrect = true; if (result instanceof MissingNode || result instanceof NullNode) { errorHandle(DinkyTaskConstants.API_VERSION_ERROR_TIPS); - return false; + isCorrect = false; } else if (result.get(DinkyTaskConstants.API_RESULT_CODE).asInt() == DinkyTaskConstants.API_ERROR) { errorHandle(result.get(DinkyTaskConstants.API_RESULT_MSG)); - return false; + isCorrect = false; } - return true; + return isCorrect; } private boolean checkResultV1(JsonNode result) { + boolean isCorrect = true; if (result instanceof MissingNode || result instanceof NullNode) { errorHandle(DinkyTaskConstants.API_VERSION_ERROR_TIPS); - return false; + isCorrect = false; } else if (!result.get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean()) { errorHandle(result.get(DinkyTaskConstants.API_RESULT_MSG)); - return false; + isCorrect = false; } - return true; + return isCorrect; } private void errorHandle(Object msg) { @@ -350,9 +354,8 @@ private Map generateVariables() { private String getDinkyVersion(String address) { JsonNode versionJsonNode = parse(doGet(address + DinkyTaskConstants.GET_VERSION, new HashMap<>())); - if (versionJsonNode instanceof MissingNode || versionJsonNode == null) { - return "0"; - } else if (versionJsonNode.get(DinkyTaskConstants.API_RESULT_CODE).asInt() == DinkyTaskConstants.API_ERROR) { + if (versionJsonNode instanceof MissingNode || versionJsonNode == null + || versionJsonNode.get(DinkyTaskConstants.API_RESULT_CODE).asInt() == DinkyTaskConstants.API_ERROR) { return "0"; } return versionJsonNode.get(DinkyTaskConstants.API_RESULT_DATA).asText(); diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java index ca270103e60d..827a4c163544 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTaskConstants.java @@ -57,6 +57,10 @@ private DinkyTaskConstants() { public static final String STATUS_FAILED = "FAILED"; public static final String STATUS_UNKNOWN = "UNKNOWN"; + public static final String SUBMIT_FAILED_MSG = "Submit dinkyTask failed:"; + public static final String TRACK_FAILED_MSG = "Track dinkyTask failed:"; + public static final String APPIDS_FORMAT = "%s-%s"; + public static final long SLEEP_MILLIS = 3000; } From 86bcac1477d51fc0b925f23b7114097cdce02962 Mon Sep 17 00:00:00 2001 From: wenmo <32723967+wenmo@users.noreply.github.com> Date: Mon, 15 Jan 2024 22:00:10 +0800 Subject: [PATCH 3/3] Fix issue --- .../plugin/task/dinky/DinkyTask.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java index f8e134e11b58..2c0b0cb68e11 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-dinky/src/main/java/org/apache/dolphinscheduler/plugin/task/dinky/DinkyTask.java @@ -147,16 +147,16 @@ private void submitApplicationV1() { String taskId = this.dinkyParameters.getTaskId(); boolean isOnline = this.dinkyParameters.isOnline(); JsonNode result; - String API_RESULT_DATA = DinkyTaskConstants.API_RESULT_DATA; + String apiResultDataKey = DinkyTaskConstants.API_RESULT_DATA; // Submit dinky-1.0.0 task result = submitTaskV1(address, taskId, isOnline, generateVariables()); if (checkResultV1(result)) { status = result.get(DinkyTaskConstants.API_RESULT_SUCCESS).asBoolean(); - if (result.get(API_RESULT_DATA).has(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) - && !(result.get(API_RESULT_DATA) + if (result.get(apiResultDataKey).has(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) + && !(result.get(apiResultDataKey) .get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID) instanceof NullNode)) { jobInstanceId = - result.get(API_RESULT_DATA).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); + result.get(apiResultDataKey).get(DinkyTaskConstants.API_RESULT_JOB_INSTANCE_ID).asText(); } } else { log.error(DinkyTaskConstants.SUBMIT_FAILED_MSG + "{}", result.get(DinkyTaskConstants.API_RESULT_MSG)); @@ -234,7 +234,7 @@ public void trackApplicationStatusV1() throws TaskException { log.info("Dinky common sql task finished."); return; } - String API_RESULT_DATA = DinkyTaskConstants.API_RESULT_DATA; + String apiResultDataKey = DinkyTaskConstants.API_RESULT_DATA; boolean finishFlag = false; while (!finishFlag) { JsonNode jobInstanceInfoResult = getJobInstanceInfo(address, jobInstanceId); @@ -242,7 +242,7 @@ public void trackApplicationStatusV1() throws TaskException { break; } String jobInstanceStatus = - jobInstanceInfoResult.get(API_RESULT_DATA).get("status").asText(); + jobInstanceInfoResult.get(apiResultDataKey).get("status").asText(); switch (jobInstanceStatus) { case DinkyTaskConstants.STATUS_FINISHED: final int exitStatusCode = mapStatusToExitCode(status); @@ -250,13 +250,13 @@ public void trackApplicationStatusV1() throws TaskException { setAppIds(String.format(DinkyTaskConstants.APPIDS_FORMAT, address, taskId)); setExitStatusCode(exitStatusCode); log.info("dinky task finished with results: {}", - jobInstanceInfoResult.get(API_RESULT_DATA)); + jobInstanceInfoResult.get(apiResultDataKey)); finishFlag = true; break; case DinkyTaskConstants.STATUS_FAILED: case DinkyTaskConstants.STATUS_CANCELED: case DinkyTaskConstants.STATUS_UNKNOWN: - errorHandle(jobInstanceInfoResult.get(API_RESULT_DATA).get(DinkyTaskConstants.API_RESULT_ERROR) + errorHandle(jobInstanceInfoResult.get(apiResultDataKey).get(DinkyTaskConstants.API_RESULT_ERROR) .asText()); finishFlag = true; break;