Repository: incubator-ranger Updated Branches: refs/heads/master d58bda23c -> e561bff4b
RANGER-971: RangerPolicyEvaluator Cache key needs to include resource-def-name Signed-off-by: Madhan Neethiraj <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/e561bff4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/e561bff4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/e561bff4 Branch: refs/heads/master Commit: e561bff4b52bf3bc2842ff755bbd35d31443e8a7 Parents: d58bda2 Author: Abhay Kulkarni <[email protected]> Authored: Thu May 5 09:51:19 2016 -0700 Committer: Madhan Neethiraj <[email protected]> Committed: Thu May 5 12:59:25 2016 -0700 ---------------------------------------------------------------------- .../policyengine/RangerAccessResource.java | 3 ++ .../policyengine/RangerAccessResourceImpl.java | 34 ++++++++++++++++++-- .../RangerAccessResourceReadOnly.java | 2 ++ .../RangerResourceAccessCacheImpl.java | 4 +-- 4 files changed, 39 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e561bff4/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResource.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResource.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResource.java index 0b4b23d..9ca7ddf 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResource.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResource.java @@ -27,6 +27,7 @@ import org.apache.ranger.plugin.model.RangerServiceDef; public interface RangerAccessResource { String RESOURCE_SEP = "/"; + String RESOURCE_NAME_VAL_SEP = "="; String getOwnerUser(); @@ -42,6 +43,8 @@ public interface RangerAccessResource { String getAsString(); + String getCacheKey(); + Map<String, String> getAsMap(); RangerAccessResource getReadOnlyCopy(); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e561bff4/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceImpl.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceImpl.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceImpl.java index 4769bba..e240916 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceImpl.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceImpl.java @@ -34,6 +34,7 @@ public class RangerAccessResourceImpl implements RangerMutableResource { private String ownerUser = null; private Map<String, String> elements = null; private String stringifiedValue = null; + private String stringifiedCacheKeyValue = null; private String leafName = null; private RangerServiceDef serviceDef = null; @@ -106,13 +107,13 @@ public class RangerAccessResourceImpl implements RangerMutableResource { } // reset, so that these will be computed again with updated elements - stringifiedValue = leafName = null; + stringifiedValue = stringifiedCacheKeyValue = leafName = null; } @Override public void setServiceDef(final RangerServiceDef serviceDef) { this.serviceDef = serviceDef; - this.stringifiedValue = this.leafName = null; + this.stringifiedValue = this.stringifiedCacheKeyValue = this.leafName = null; } @Override @@ -175,6 +176,35 @@ public class RangerAccessResourceImpl implements RangerMutableResource { } @Override + public String getCacheKey() { + String ret = stringifiedCacheKeyValue; + + if(ret == null) { + if(serviceDef != null && serviceDef.getResources() != null) { + StringBuilder sb = new StringBuilder(); + + for(RangerResourceDef resourceDef : serviceDef.getResources()) { + if(resourceDef == null || !exists(resourceDef.getName())) { + continue; + } + + if(sb.length() > 0) { + sb.append(RESOURCE_SEP); + } + + sb.append(resourceDef.getName()).append(RESOURCE_NAME_VAL_SEP).append(getValue(resourceDef.getName())); + } + + if(sb.length() > 0) { + ret = stringifiedCacheKeyValue = sb.toString(); + } + } + } + + return ret; + } + + @Override public Map<String, String> getAsMap() { return Collections.unmodifiableMap(elements); } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e561bff4/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceReadOnly.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceReadOnly.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceReadOnly.java index 59e968d..94c7c9d 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceReadOnly.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResourceReadOnly.java @@ -64,6 +64,8 @@ public class RangerAccessResourceReadOnly implements RangerAccessResource { public String getAsString() { return source.getAsString(); } + public String getCacheKey() { return source.getCacheKey(); } + public Map<String, String> getAsMap() { return map; } public RangerAccessResource getReadOnlyCopy() { return this; } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e561bff4/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerResourceAccessCacheImpl.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerResourceAccessCacheImpl.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerResourceAccessCacheImpl.java index 5f3f899..074b08d 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerResourceAccessCacheImpl.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerResourceAccessCacheImpl.java @@ -62,7 +62,7 @@ public class RangerResourceAccessCacheImpl implements RangerResourceAccessCache @Override public LookupResult lookup(RangerAccessResource resource) { - String strResource = resource.getAsString(); + String strResource = resource.getCacheKey(); if(LOG.isDebugEnabled()) { LOG.debug("==> RangerResourceAccessCacheImpl.lookup(" + strResource + ")"); @@ -91,7 +91,7 @@ public class RangerResourceAccessCacheImpl implements RangerResourceAccessCache @Override public void add(RangerAccessResource resource, CacheType cacheType) { - String strResource = resource.getAsString(); + String strResource = resource.getCacheKey(); if(LOG.isDebugEnabled()) { LOG.debug("==> RangerResourceAccessCacheImpl.add(" + strResource + ", " + cacheType + ")");
