You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ab...@apache.org on 2017/09/11 05:22:48 UTC

ranger git commit: RANGER-1771: Improve performance of merging lists of policyEvaluators returned by Trie

Repository: ranger
Updated Branches:
  refs/heads/master d0cf2dd55 -> 991481b27


RANGER-1771: Improve performance of merging lists of policyEvaluators returned by Trie


Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/991481b2
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/991481b2
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/991481b2

Branch: refs/heads/master
Commit: 991481b2795de80c771d7354594b7c59ac5022ce
Parents: d0cf2dd
Author: Abhay Kulkarni <ak...@hortonworks.com>
Authored: Sun Sep 10 22:22:44 2017 -0700
Committer: Abhay Kulkarni <ak...@hortonworks.com>
Committed: Sun Sep 10 22:22:44 2017 -0700

----------------------------------------------------------------------
 .../policyengine/RangerPolicyRepository.java    | 56 +++++++++++---------
 1 file changed, 32 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/991481b2/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
index a1002e8..067ca04 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyRepository.java
@@ -258,7 +258,8 @@ class RangerPolicyRepository {
         Set<String>                 resourceKeys = resource == null ? null : resource.getKeys();
 
         if(CollectionUtils.isNotEmpty(resourceKeys)) {
-            boolean isRetModifiable = false;
+            List<List<RangerPolicyEvaluator>> resourceEvaluatorsList = null;
+            List<RangerPolicyEvaluator> smallestList = null;
 
             for(String resourceName : resourceKeys) {
                 RangerResourceTrie trie = resourceTrie.get(resourceName);
@@ -270,34 +271,41 @@ class RangerPolicyRepository {
                 List<RangerPolicyEvaluator> resourceEvaluators = trie.getEvaluatorsForResource(resource.getValue(resourceName));
 
                 if(CollectionUtils.isEmpty(resourceEvaluators)) { // no policies for this resource, bail out
-                    ret = null;
-                } else if(ret == null) { // initialize ret with policies found for this resource
-                    ret = resourceEvaluators;
-                } else { // remove policies from ret that are not in resourceEvaluators
-                    if(isRetModifiable) {
-                        ret.retainAll(resourceEvaluators);
-                    } else {
-                        final List<RangerPolicyEvaluator> shorterList;
-                        final List<RangerPolicyEvaluator> longerList;
-
-                        if (ret.size() < resourceEvaluators.size()) {
-                            shorterList = ret;
-                            longerList  = resourceEvaluators;
-                        } else {
-                            shorterList = resourceEvaluators;
-                            longerList  = ret;
-                        }
+                    resourceEvaluatorsList = null;
+                    smallestList = null;
+                    break;
+                }
+
+                if (smallestList == null) {
+                    smallestList = resourceEvaluators;
+                } else {
+                    if (resourceEvaluatorsList == null) {
+                        resourceEvaluatorsList = new ArrayList<>();
+                        resourceEvaluatorsList.add(smallestList);
+                    }
+                    resourceEvaluatorsList.add(resourceEvaluators);
 
-                        ret = new ArrayList<>(shorterList);
-                        ret.retainAll(longerList);
-                        isRetModifiable = true;
+                    if (smallestList.size() > resourceEvaluators.size()) {
+                        smallestList = resourceEvaluators;
                     }
                 }
+            }
 
-                if(CollectionUtils.isEmpty(ret)) { // if no policy exists, bail out and return empty list
-                    ret = null;
-                    break;
+            if (resourceEvaluatorsList != null) {
+                ret = new ArrayList<>(smallestList);
+                for (List<RangerPolicyEvaluator> resourceEvaluators : resourceEvaluatorsList) {
+                    if (resourceEvaluators != smallestList) {
+                        // remove policies from ret that are not in resourceEvaluators
+                        ret.retainAll(resourceEvaluators);
+
+                        if (CollectionUtils.isEmpty(ret)) { // if no policy exists, bail out and return empty list
+                            ret = null;
+                            break;
+                        }
+                    }
                 }
+            } else {
+                ret = smallestList;
             }
         }