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;
}
}