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 + ")");

Reply via email to