From f817b22130560811490763da73ec17a9ff362597 Mon Sep 17 00:00:00 2001 From: emptyOVO Date: Fri, 22 Nov 2024 17:57:21 +0800 Subject: [PATCH] fix: add retry mechanism while deleting project or process --- .../DolphinScheduleConstants.java | 3 +++ .../DolphinScheduleUtils.java | 26 +++++++++++++++++-- .../exception/DolphinScheduleException.java | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleConstants.java b/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleConstants.java index 89dcda5b77..1488ca1fe8 100644 --- a/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleConstants.java +++ b/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleConstants.java @@ -22,6 +22,7 @@ public class DolphinScheduleConstants { // DS public constants public static final String DS_ID = "id"; public static final String DS_CODE = "code"; + public static final String DS_SUCCESS = "success"; public static final String DS_TOKEN = "token"; public static final String DS_PAGE_SIZE = "pageSize"; public static final String DS_PAGE_NO = "pageNo"; @@ -29,6 +30,8 @@ public class DolphinScheduleConstants { public static final String DS_RESPONSE_DATA = "data"; public static final String DS_RESPONSE_NAME = "name"; public static final String DS_RESPONSE_TOTAL_LIST = "totalList"; + public static final int DS_DEFAULT_RETRY_TIMES = 3; + public static final int DS_DEFAULT_WAIT_MILLS = 1000; public static final String DS_DEFAULT_PAGE_SIZE = "10"; public static final String DS_DEFAULT_PAGE_NO = "1"; public static final String DS_DEFAULT_TIMEZONE_ID = "Asia/Shanghai"; diff --git a/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleUtils.java b/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleUtils.java index 87cb1c5127..ac6c783c24 100644 --- a/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleUtils.java +++ b/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/dolphinscheduler/DolphinScheduleUtils.java @@ -57,11 +57,13 @@ import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_CODE; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_PAGE_NO; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_PAGE_SIZE; +import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_RETRY_TIMES; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_SCHEDULE_TIME_FORMAT; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_TASK_DESC; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_TASK_GEN_NUM; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_TASK_NAME; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_TIMEZONE_ID; +import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_DEFAULT_WAIT_MILLS; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_ID; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_ONLINE_URL; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_PAGE_NO; @@ -78,6 +80,7 @@ import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_RESPONSE_TOTAL_LIST; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_SCHEDULE_DEF; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_SEARCH_VAL; +import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_SUCCESS; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_TASK_DEFINITION; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_TASK_GEN_NUM; import static org.apache.inlong.manager.schedule.dolphinscheduler.DolphinScheduleConstants.DS_TASK_RELATION; @@ -89,6 +92,7 @@ import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.JSON_PARSE_ERROR; import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.NETWORK_ERROR; import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.PROCESS_DEFINITION_CREATION_FAILED; +import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.PROCESS_DEFINITION_IN_USED_ERROR; import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.PROCESS_DEFINITION_QUERY_FAILED; import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.PROCESS_DEFINITION_RELEASE_FAILED; import static org.apache.inlong.manager.schedule.exception.DolphinScheduleException.PROJECT_CREATION_FAILED; @@ -489,10 +493,27 @@ public static void delete(String url, String token, long code) { Map header = buildHeader(token); String requestUrl = url + "/" + code; + for (int attempt = 1; attempt <= DS_DEFAULT_RETRY_TIMES; attempt++) { + JsonObject response = executeHttpRequest(requestUrl, DELETE, new HashMap<>(), header); - JsonObject response = executeHttpRequest(requestUrl, DELETE, new HashMap<>(), header); - LOGGER.info("delete process or project success, response data: {}", response); + if (response.get(DS_SUCCESS).getAsBoolean()) { + LOGGER.info("Delete process or project success, response data: {}", response); + return; + } + + if (response.get(DS_CODE).getAsInt() == PROCESS_DEFINITION_IN_USED_ERROR) { + LOGGER.warn("Attempt {} of {}, retrying after {} ms...", attempt, DS_DEFAULT_RETRY_TIMES, + DS_DEFAULT_WAIT_MILLS); + Thread.sleep(DS_DEFAULT_WAIT_MILLS); + } + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + LOGGER.error("Thread interrupted while retrying delete process or project: ", e); + throw new DolphinScheduleException( + DELETION_FAILED, + String.format("Thread interrupted while retrying delete for code: %d at URL: %s", code, url), e); } catch (JsonParseException e) { LOGGER.error("JsonParseException during deleting process or project", e); throw new DolphinScheduleException( @@ -500,6 +521,7 @@ public static void delete(String url, String token, long code) { String.format("Error deleting process or project with code: %d at URL: %s", code, url), e); } catch (DolphinScheduleException e) { + LOGGER.error("Error deleting process or project: ", e); throw new DolphinScheduleException( DELETION_FAILED, String.format("Error deleting process or project with code: %d at URL: %s", code, url), e); diff --git a/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/exception/DolphinScheduleException.java b/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/exception/DolphinScheduleException.java index 348697b672..b5238a3a35 100644 --- a/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/exception/DolphinScheduleException.java +++ b/inlong-manager/manager-schedule/src/main/java/org/apache/inlong/manager/schedule/exception/DolphinScheduleException.java @@ -42,6 +42,7 @@ public class DolphinScheduleException extends RuntimeException { public static final String GEN_TASK_CODE_FAILED = "GEN_TASK_CODE_FAILED"; // Process-related error codes + public static final int PROCESS_DEFINITION_IN_USED_ERROR = 10163; public static final String PROCESS_DEFINITION_QUERY_FAILED = "PROCESS_DEFINITION_QUERY_FAILED"; public static final String PROCESS_DEFINITION_CREATION_FAILED = "PROCESS_DEFINITION_CREATION_FAILED"; public static final String PROCESS_DEFINITION_RELEASE_FAILED = "PROCESS_DEFINITION_RELEASE_FAILED";