This is an automated email from the ASF dual-hosted git repository.
abhay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push:
new 3f78f9fae RANGER-4478: Incorrect trie updates when processing deltas -
Part 3
3f78f9fae is described below
commit 3f78f9fae635b4dc1febdd1aad99e485cde412d6
Author: Abhay Kulkarni <[email protected]>
AuthorDate: Sat Nov 4 13:16:35 2023 -0700
RANGER-4478: Incorrect trie updates when processing deltas - Part 3
---
.../plugin/policyengine/RangerResourceTrie.java | 41 +++++++++++++++++++---
1 file changed, 37 insertions(+), 4 deletions(-)
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceTrie.java
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceTrie.java
index d95da7c50..773a02609 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceTrie.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceTrie.java
@@ -576,7 +576,7 @@ public class RangerResourceTrie<T extends
RangerResourceEvaluator> {
}
- private String getNonWildcardPrefix(String str) {
+ private int getNonWildcardPrefixLength(String str) {
int minIndex = str.length();
for (int i = 0; i < wildcardChars.length(); i++) {
@@ -587,9 +587,17 @@ public class RangerResourceTrie<T extends
RangerResourceEvaluator> {
}
}
- return str.substring(0, minIndex);
+ return minIndex;
+ }
+
+ private String getNonWildcardPrefix(String str) {
+ int prefixLen = getNonWildcardPrefixLength(str);
+
+ return (prefixLen < str.length()) ? str.substring(0, prefixLen) : str;
}
+
+
private Set<T> getEvaluatorsForResource(String resource,
ResourceElementMatchingScope scope) {
if(LOG.isDebugEnabled()) {
LOG.debug("==> RangerResourceTrie.getEvaluatorsForResource(" +
resource + ", " + scope + ")");
@@ -718,7 +726,7 @@ public class RangerResourceTrie<T extends
RangerResourceEvaluator> {
}
TrieNode<T> curr = root;
- final int len = resource.length();
+ final int len = getNonWildcardPrefixLength(resource);
int i = 0;
while (i < len) {
@@ -738,6 +746,8 @@ public class RangerResourceTrie<T extends
RangerResourceEvaluator> {
i += childStr.length();
}
+ curr = (i == len) ? curr : null;
+
RangerPerfTracer.logAlways(perf);
if(LOG.isDebugEnabled()) {
@@ -1128,11 +1138,21 @@ public class RangerResourceTrie<T extends
RangerResourceEvaluator> {
}
void removeSelfFromTrie() {
- if (evaluators == null && wildcardEvaluators == null &&
children.size() == 0) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> removeSelfFromTrie(" + this + ")");
+ }
+ if (evaluators == null && children.size() == 0) {
TrieNode<U> parent = getParent();
if (parent != null) {
parent.children.remove(str.charAt(0));
}
+ } else {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("removeSelfFromTrie(" + this + ") could not
remove self from Trie");
+ }
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== removeSelfFromTrie(" + this + ")");
}
}
@@ -1298,12 +1318,25 @@ public class RangerResourceTrie<T extends
RangerResourceEvaluator> {
}
private void removeEvaluatorFromSubtree(U evaluator) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> removeEvaluatorFromSubtree(" +
evaluator.getId() + ")");
+ }
if (CollectionUtils.isNotEmpty(wildcardEvaluators) &&
wildcardEvaluators.contains(evaluator)) {
removeWildcardEvaluator(evaluator);
} else {
removeEvaluator(evaluator);
}
removeSelfFromTrie();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== removeEvaluatorFromSubtree(" +
evaluator.getId() + ")");
+ }
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ toString(sb);
+ return sb.toString();
}
void toString(StringBuilder sb) {