This is an automated email from the ASF dual-hosted git repository.
kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 705715c [Improvement-5059][API] Verify that the new workflow
definition version is the current version before removing it #5059 (#5060)
705715c is described below
commit 705715c3130be49a8bab9bc2d181b2ad26d453da
Author: zhuangchong <[email protected]>
AuthorDate: Thu Mar 18 09:37:17 2021 +0800
[Improvement-5059][API] Verify that the new workflow definition version is
the current version before removing it #5059 (#5060)
* this process definition version is used, not allowed to delete.
* update ProcessDefinitionVersionServiceTest test class.
* update check has associated process definition sql.
---
.../org/apache/dolphinscheduler/api/enums/Status.java | 4 +++-
.../api/service/ProcessDefinitionService.java | 9 +++++++++
.../api/service/impl/ProcessDefinitionServiceImpl.java | 13 +++++++++++++
.../service/impl/ProcessDefinitionVersionServiceImpl.java | 15 +++++++++++++++
.../api/service/ProcessDefinitionVersionServiceTest.java | 13 +++++++++++++
.../dao/mapper/ProcessDefinitionMapper.java | 8 ++++++++
.../dao/mapper/ProcessDefinitionMapper.xml | 7 +++++++
.../pages/definition/pages/list/_source/versions.vue | 4 ++--
8 files changed, 70 insertions(+), 3 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index 1ec9744..f77be9f 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -297,7 +297,9 @@ public enum Status {
PLUGIN_INSTANCE_ALREADY_EXIT(110010, "plugin instance already exit",
"该告警插件实例已存在"),
LIST_PAGING_ALERT_PLUGIN_INSTANCE_ERROR(110011, "query plugin instance
page error", "分页查询告警实例失败"),
DELETE_ALERT_PLUGIN_INSTANCE_ERROR_HAS_ALERT_GROUP_ASSOCIATED(110012,
"failed to delete the alert instance, there is an alarm group associated with
this alert instance",
- "删除告警实例失败,存在与此告警实例关联的警报组");
+ "删除告警实例失败,存在与此告警实例关联的警报组"),
+ PROCESS_DEFINITION_VERSION_IS_USED(110013,"this process definition version
is used","此工作流定义版本被使用");
+
private final int code;
private final String enMsg;
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index 82651dd..be07225 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -274,5 +274,14 @@ public interface ProcessDefinitionService {
*/
Map<String, Object> switchProcessDefinitionVersion(User loginUser, String
projectName
, int processDefinitionId, long version);
+
+ /**
+ * check has associated process definition
+ *
+ * @param processDefinitionId process definition id
+ * @param version version
+ * @return The query result has a specific process definition return true
+ */
+ boolean checkHasAssociatedProcessDefinition(int processDefinitionId, long
version);
}
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 97cea02..4ab43fb 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
@@ -1798,5 +1798,18 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
}
}
+ /**
+ * check has associated process definition
+ *
+ * @param processDefinitionId process definition id
+ * @param version version
+ * @return The query result has a specific process definition return true
+ */
+ @Override
+ public boolean checkHasAssociatedProcessDefinition(int
processDefinitionId, long version) {
+ Integer hasAssociatedDefinitionId =
processDefineMapper.queryHasAssociatedDefinitionByIdAndVersion(processDefinitionId,
version);
+ return Objects.nonNull(hasAssociatedDefinitionId);
+ }
+
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java
index be7a3e9..988ab20 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java
@@ -18,6 +18,7 @@
package org.apache.dolphinscheduler.api.service.impl;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.service.ProcessDefinitionService;
import org.apache.dolphinscheduler.api.service.ProcessDefinitionVersionService;
import org.apache.dolphinscheduler.api.service.ProjectService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
@@ -56,6 +57,9 @@ public class ProcessDefinitionVersionServiceImpl extends
BaseServiceImpl impleme
@Autowired
private ProjectMapper projectMapper;
+ @Autowired
+ private ProcessDefinitionService processDefinitionService;
+
/**
* add the newest version of one process definition
*
@@ -178,8 +182,19 @@ public class ProcessDefinitionVersionServiceImpl extends
BaseServiceImpl impleme
if (resultStatus != Status.SUCCESS) {
return checkResult;
}
+
+ // check has associated process definition
+ boolean hasAssociatedProcessDefinition =
processDefinitionService.checkHasAssociatedProcessDefinition(processDefinitionId,
version);
+ if (hasAssociatedProcessDefinition) {
+ putMsg(result, Status.PROCESS_DEFINITION_VERSION_IS_USED);
+ return result;
+ }
+
processDefinitionVersionMapper.deleteByProcessDefinitionIdAndVersion(processDefinitionId,
version);
putMsg(result, Status.SUCCESS);
return result;
}
+
+
+
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java
index 1286877..f2a0e8d 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java
@@ -63,6 +63,9 @@ public class ProcessDefinitionVersionServiceTest {
@Mock
private ProjectServiceImpl projectService;
+ @Mock
+ private ProcessDefinitionService processDefinitionService;
+
@Test
public void testAddProcessDefinitionVersion() {
long expectedVersion = 5L;
@@ -201,6 +204,8 @@ public class ProcessDefinitionVersionServiceTest {
.thenReturn(1);
Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName))
.thenReturn(res);
+
Mockito.when(processDefinitionService.checkHasAssociatedProcessDefinition(processDefinitionId,
version))
+ .thenReturn(false);
Map<String, Object> resultMap2 =
processDefinitionVersionService.deleteByProcessDefinitionIdAndVersion(
loginUser
@@ -210,6 +215,14 @@ public class ProcessDefinitionVersionServiceTest {
Assert.assertEquals(Status.SUCCESS, resultMap2.get(Constants.STATUS));
+
Mockito.when(processDefinitionService.checkHasAssociatedProcessDefinition(processDefinitionId,
version))
+ .thenReturn(true);
+ Map<String, Object> resultMap3 =
processDefinitionVersionService.deleteByProcessDefinitionIdAndVersion(
+ loginUser
+ , projectName
+ , processDefinitionId
+ , version);
+ Assert.assertEquals(Status.PROCESS_DEFINITION_VERSION_IS_USED,
resultMap3.get(Constants.STATUS));
}
/**
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
index 36c9887..5f5f0f7 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
@@ -144,4 +144,12 @@ public interface ProcessDefinitionMapper extends
BaseMapper<ProcessDefinition> {
* @return project ids list
*/
List<Integer> listProjectIds();
+
+ /**
+ * query has associated definition by id and version
+ * @param processDefinitionId process definition id
+ * @param version version
+ * @return definition id
+ */
+ Integer
queryHasAssociatedDefinitionByIdAndVersion(@Param("processDefinitionId") int
processDefinitionId, @Param("version") long version);
}
diff --git
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
index a24fd29..3abca43 100644
---
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
+++
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
@@ -139,4 +139,11 @@
set version = #{version}
where id = #{processDefinitionId}
</update>
+
+ <select id="queryHasAssociatedDefinitionByIdAndVersion"
resultType="java.lang.Integer">
+ select id
+ from t_ds_process_definition
+ where id = #{processDefinitionId}
+ and version = #{version} limit 1
+ </select>
</mapper>
diff --git
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue
index b304648..9677a1c 100644
---
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue
+++
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue
@@ -50,7 +50,7 @@
:title="$t('Confirm Switch To This Version?')"
@onConfirm="_mVersionSwitchProcessDefinitionVersion(scope.row)"
>
- <el-button type="primary" size="mini" icon="el-icon-warning"
circle slot="reference"></el-button>
+ <el-button :disabled="scope.row.version ===
versionData.processDefinition.version" type="primary" size="mini"
icon="el-icon-warning" circle slot="reference"></el-button>
</el-popconfirm>
</el-tooltip>
<el-tooltip :content="$t('Delete')" placement="top">
@@ -62,7 +62,7 @@
:title="$t('Delete?')"
@onConfirm="_mVersionDeleteProcessDefinitionVersion(scope.row,scope.row.id)"
>
- <el-button type="danger" size="mini" icon="el-icon-delete"
circle slot="reference"></el-button>
+ <el-button :disabled="scope.row.version ===
versionData.processDefinition.version" type="danger" size="mini"
icon="el-icon-delete" circle slot="reference"></el-button>
</el-popconfirm>
</el-tooltip>
</template>