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

Reply via email to