This is an automated email from the ASF dual-hosted git repository.
journey pushed a commit to branch dev-resource-tree
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev-resource-tree by this push:
new 1a722c8 build resource process definition map (#2076)
1a722c8 is described below
commit 1a722c8646ca21af082d17c7cf88ba884859fe58
Author: qiaozhanwei <[email protected]>
AuthorDate: Thu Mar 5 11:08:27 2020 +0800
build resource process definition map (#2076)
* update resource service test
* Fix github action rerun failed
* add status of PARENT_RESOURCE_NOT_EXIST
* build resource process definition map
---
.../api/service/ResourcesService.java | 48 ++++++++++++++++++----
.../dao/mapper/ProcessDefinitionMapper.java | 4 +-
.../dao/mapper/ProcessDefinitionMapper.xml | 7 ++--
3 files changed, 47 insertions(+), 12 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
index b1dbed2..02bffc7 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
@@ -548,14 +548,11 @@ public class ResourcesService extends BaseService {
}
// get all resource id of process definitions those is released
- List<String> resourceIdsList =
processDefinitionMapper.listResourceIds();
- Set<Integer> resourceIdSet = new HashSet<>();
- resourceIdsList.stream().map(t->t.split(",")).forEach(t-> {
-
resourceIdSet.addAll(Arrays.stream(t).map(s->Integer.parseInt(s)).collect(Collectors.toSet()));
- });
-
+ Map<Integer, Set<Integer>> resourceProcessMap =
getResourceProcessMap();
+ Set<Integer> resourceIdSet = resourceProcessMap.keySet();
// get all children of the resource
List<Integer> allChildren = listAllChildren(resource);
+
if (resourceIdSet.contains(resource.getPid())) {
logger.error("can't be deleted,because it is used of process
definition");
putMsg(result, Status.RESOURCE_IS_USED);
@@ -564,6 +561,9 @@ public class ResourcesService extends BaseService {
resourceIdSet.retainAll(allChildren);
if (CollectionUtils.isNotEmpty(resourceIdSet)) {
logger.error("can't be deleted,because it is used of process
definition");
+ for (Integer resId : resourceIdSet) {
+ logger.error("resource id:{} is used of process definition
{}",resId,resourceProcessMap.get(resId));
+ }
putMsg(result, Status.RESOURCE_IS_USED);
return result;
}
@@ -582,8 +582,6 @@ public class ResourcesService extends BaseService {
return result;
}
-
-
/**
* verify resource by name and type
* @param loginUser login user
@@ -1093,4 +1091,38 @@ public class ResourcesService extends BaseService {
}
+ /**
+ * get resource process map key is resource id,value is the set of process
definition
+ * @return resource process definition map
+ */
+ private Map<Integer,Set<Integer>> getResourceProcessMap(){
+ Map<Integer, String> map = new HashMap<>();
+ Map<Integer, Set<Integer>> result = new HashMap<>();
+ List<Map<String, Object>> list =
processDefinitionMapper.listResources();
+ if (CollectionUtils.isNotEmpty(list)) {
+ for (Map<String, Object> tempMap : list) {
+
+ map.put((Integer) tempMap.get("id"),
(String)tempMap.get("resource_ids"));
+ }
+ }
+
+ for (Map.Entry<Integer, String> entry : map.entrySet()) {
+ Integer mapKey = entry.getKey();
+ String[] arr = entry.getValue().split(",");
+ Set<Integer> mapValues =
Arrays.stream(arr).map(Integer::parseInt).collect(Collectors.toSet());
+ for (Integer value : mapValues) {
+ if (result.containsKey(value)) {
+ Set<Integer> set = result.get(value);
+ set.add(mapKey);
+ result.put(value, set);
+ } else {
+ Set<Integer> set = new HashSet<>();
+ set.add(mapKey);
+ result.put(value, set);
+ }
+ }
+ }
+ return result;
+ }
+
}
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 3524ae0..b75bb58 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
@@ -20,6 +20,7 @@ import
org.apache.dolphinscheduler.dao.entity.DefinitionGroupByUser;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -99,5 +100,6 @@ public interface ProcessDefinitionMapper extends
BaseMapper<ProcessDefinition> {
* list all resource ids
* @return resource ids list
*/
- List<String> listResourceIds();
+ @MapKey("id")
+ List<Map<String, Object>> listResources();
}
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 691292a..377de30 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
@@ -88,9 +88,10 @@
AND pd.id = #{processDefineId}
</select>
- <select id="listResourceIds" resultType="java.lang.String">
- SELECT resource_ids
+
+ <select id="listResources" resultType="java.util.HashMap">
+ SELECT id,resource_ids
FROM t_ds_process_definition
- WHERE release_state = 1
+ WHERE release_state = 1 and resource_ids is not null
</select>
</mapper>
\ No newline at end of file