You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by zh...@apache.org on 2022/08/04 07:04:20 UTC
[dolphinscheduler] branch dev updated: [fix] Process definition length too long when copy or import (#10621)
This is an automated email from the ASF dual-hosted git repository.
zhongjiajie pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new c34503e3f6 [fix] Process definition length too long when copy or import (#10621)
c34503e3f6 is described below
commit c34503e3f6cbfb20f1298a57d52af1990ddaf5aa
Author: zhuxt2015 <59...@qq.com>
AuthorDate: Thu Aug 4 15:04:14 2022 +0800
[fix] Process definition length too long when copy or import (#10621)
---
.../service/impl/ProcessDefinitionServiceImpl.java | 31 +++++++++++++++++++---
.../api/service/ProcessDefinitionServiceTest.java | 14 ++++++++++
.../apache/dolphinscheduler/common/Constants.java | 4 +++
3 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index 8e49ffea27..88be804307 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -32,8 +32,10 @@ import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationCon
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_TREE_VIEW;
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_UPDATE;
import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_DEFINE_CODE;
+import static org.apache.dolphinscheduler.common.Constants.COPY_SUFFIX;
import static org.apache.dolphinscheduler.common.Constants.DEFAULT_WORKER_GROUP;
import static org.apache.dolphinscheduler.common.Constants.EMPTY_STRING;
+import static org.apache.dolphinscheduler.common.Constants.IMPORT_SUFFIX;
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.COMPLEX_TASK_TYPES;
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.TASK_TYPE_SQL;
@@ -1010,7 +1012,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
if (index > 0) {
processDefinitionName = processDefinitionName.substring(0, index);
}
- processDefinitionName = processDefinitionName + "_import_" + DateUtils.getCurrentTimeStamp();
+ processDefinitionName = getNewName(processDefinitionName, IMPORT_SUFFIX);
ProcessDefinition processDefinition;
List<TaskDefinitionLog> taskDefinitionList = new ArrayList<>();
@@ -1206,8 +1208,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
// generate import processDefinitionName
String processDefinitionName = recursionProcessDefinitionName(projectCode, processDefinition.getName(), 1);
- String importProcessDefinitionName = processDefinitionName + "_import_" + DateUtils.getCurrentTimeStamp();
-
+ String importProcessDefinitionName = getNewName(processDefinitionName, IMPORT_SUFFIX);
//unique check
Map<String, Object> checkResult = verifyProcessDefinitionName(loginUser, projectCode, importProcessDefinitionName);
if (Status.SUCCESS.equals(checkResult.get(Constants.STATUS))) {
@@ -1844,7 +1845,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
}
processDefinition.setId(0);
processDefinition.setUserId(loginUser.getId());
- processDefinition.setName(processDefinition.getName() + "_copy_" + DateUtils.getCurrentTimeStamp());
+ processDefinition.setName(getNewName(processDefinition.getName(), COPY_SUFFIX));
final Date date = new Date();
processDefinition.setCreateTime(date);
processDefinition.setUpdateTime(date);
@@ -1891,6 +1892,28 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
}
}
+ /**
+ * get new Task name or Process name when copy or import operate
+ * @param originalName Task or Process original name
+ * @param suffix "_copy_" or "_import_"
+ * @return
+ */
+ public String getNewName(String originalName, String suffix) {
+ StringBuilder newName = new StringBuilder();
+ String regex = String.format(".*%s\\d{17}$", suffix);
+ if (originalName.matches(regex)) {
+ //replace timestamp of originalName
+ return newName.append(originalName, 0, originalName.lastIndexOf(suffix))
+ .append(suffix)
+ .append(DateUtils.getCurrentTimeStamp())
+ .toString();
+ }
+ return newName.append(originalName)
+ .append(suffix)
+ .append(DateUtils.getCurrentTimeStamp())
+ .toString();
+ }
+
/**
* switch the defined process definition version
*
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index f18530196e..1d8f4d6ba1 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -41,6 +41,7 @@ import org.apache.dolphinscheduler.common.enums.ReleaseState;
import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.enums.WarningType;
import org.apache.dolphinscheduler.common.graph.DAG;
+import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.entity.DagData;
import org.apache.dolphinscheduler.dao.entity.DataSource;
@@ -761,6 +762,19 @@ public class ProcessDefinitionServiceTest {
Assert.assertEquals(result.get(Constants.STATUS), Status.SUCCESS);
}
+ @Test
+ public void testGetNewProcessName() {
+ String processName1 = "test_copy_" + DateUtils.getCurrentTimeStamp();
+ final String newName1 = processDefinitionService.getNewName(processName1, Constants.COPY_SUFFIX);
+ Assert.assertEquals(2, newName1.split(Constants.COPY_SUFFIX).length);
+ String processName2 = "wf_copy_all_ods_data_to_d";
+ final String newName2 = processDefinitionService.getNewName(processName2, Constants.COPY_SUFFIX);
+ Assert.assertEquals(3, newName2.split(Constants.COPY_SUFFIX).length);
+ String processName3 = "test_import_" + DateUtils.getCurrentTimeStamp();
+ final String newName3 = processDefinitionService.getNewName(processName3, Constants.IMPORT_SUFFIX);
+ Assert.assertEquals(2, newName3.split(Constants.IMPORT_SUFFIX).length);
+ }
+
/**
* get mock processDefinition
*
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 9b9a9fb9c2..70f7748f96 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -215,6 +215,10 @@ public final class Constants {
* date format of yyyyMMddHHmmssSSS
*/
public static final String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";
+
+ public static final String IMPORT_SUFFIX = "_import_";
+
+ public static final String COPY_SUFFIX = "_copy_";
/**
* http connect time out
*/