This is an automated email from the ASF dual-hosted git repository.

madhan 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 e44d547  RANGER-3270: updated RangerBasePlugin with configurations to 
optionally disable dynamic refreshing of policies/tags/roles
e44d547 is described below

commit e44d5472a2da7b67a73e32d0bcb44362b197005e
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Fri Apr 30 14:25:14 2021 -0700

    RANGER-3270: updated RangerBasePlugin with configurations to optionally 
disable dynamic refreshing of policies/tags/roles
---
 .../plugin/contextenricher/RangerTagEnricher.java  |  4 +-
 .../apache/ranger/plugin/model/RangerPolicy.java   |  3 +-
 .../apache/ranger/plugin/model/RangerService.java  |  6 ++-
 .../ranger/plugin/model/RangerServiceDef.java      |  5 +-
 .../policyengine/RangerPolicyEngineOptions.java    | 20 ++++++++
 .../policyengine/RangerPolicyRepository.java       | 15 +++++-
 .../ranger/plugin/service/RangerBasePlugin.java    | 56 +++++++++++++++++++---
 7 files changed, 97 insertions(+), 12 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
index f457460..a78b484 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
@@ -77,7 +77,7 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
 
 
        private static final String TAG_REFRESHER_POLLINGINTERVAL_OPTION = 
"tagRefresherPollingInterval";
-       private static final String TAG_RETRIEVER_CLASSNAME_OPTION       = 
"tagRetrieverClassName";
+       public  static final String TAG_RETRIEVER_CLASSNAME_OPTION       = 
"tagRetrieverClassName";
        private static final String TAG_DISABLE_TRIE_PREFILTER_OPTION    = 
"disableTrieLookupPrefilter";
 
        private RangerTagRefresher                 tagRefresher;
@@ -349,7 +349,7 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
 
        }
 
-       protected Long getServiceTagsVersion() {
+       public Long getServiceTagsVersion() {
                EnrichedServiceTags localEnrichedServiceTags = 
enrichedServiceTags;
                return localEnrichedServiceTags != null ? 
localEnrichedServiceTags.getServiceTags().getTagVersion() : -1L;
        }
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicy.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicy.java
index 6444fe9..3a6f416 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicy.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPolicy.java
@@ -155,17 +155,18 @@ public class RangerPolicy extends RangerBaseModelObject 
implements java.io.Seria
                setResourceSignature(other.getResourceSignature());
                setIsAuditEnabled(other.getIsAuditEnabled());
                setResources(other.getResources());
+               setConditions(other.getConditions());
                setPolicyItems(other.getPolicyItems());
                setDenyPolicyItems(other.getDenyPolicyItems());
                setAllowExceptions(other.getAllowExceptions());
                setDenyExceptions(other.getDenyExceptions());
                setDataMaskPolicyItems(other.getDataMaskPolicyItems());
                setRowFilterPolicyItems(other.getRowFilterPolicyItems());
+               setServiceType(other.getServiceType());
                setOptions(other.getOptions());
                setValiditySchedules(other.getValiditySchedules());
                setPolicyLabels(other.getPolicyLabels());
                setZoneName(other.getZoneName());
-               setConditions(other.getConditions());
                setIsDenyAllElse(other.getIsDenyAllElse());
        }
 
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerService.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerService.java
index 8bd4586..c185962 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerService.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerService.java
@@ -87,8 +87,12 @@ public class RangerService extends RangerBaseModelObject 
implements java.io.Seri
                setName(other.getName());
                setDisplayName(other.getDisplayName());
                setDescription(other.getDescription());
+               setTagService(other.getTagService());
                setConfigs(other.getConfigs());
-               setTagService(other.tagService);
+               setPolicyVersion(other.getPolicyVersion());
+               setPolicyUpdateTime(other.getPolicyUpdateTime());
+               setTagVersion(other.getTagVersion());
+               setTagUpdateTime(other.getTagUpdateTime());
        }
 
        /**
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
index 1ac45f1..db13b7b 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
@@ -124,11 +124,14 @@ public class RangerServiceDef extends 
RangerBaseModelObject implements java.io.S
                setImplClass(other.getImplClass());
                setLabel(other.getLabel());
                setDescription(other.getDescription());
-               setConfigs(other.getConfigs());
+               setRbKeyLabel(other.getRbKeyLabel());
+               setRbKeyDescription(other.getRbKeyDescription());
                setOptions(other.getOptions());
+               setConfigs(other.getConfigs());
                setResources(other.getResources());
                setAccessTypes(other.getAccessTypes());
                setPolicyConditions(other.getPolicyConditions());
+               setContextEnrichers(other.getContextEnrichers());
                setEnums(other.getEnums());
                setDataMaskDef(other.getDataMaskDef());
                setRowFilterDef(other.getRowFilterDef());
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineOptions.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineOptions.java
index 1f6aed9..0816ec1 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineOptions.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineOptions.java
@@ -29,6 +29,8 @@ public class RangerPolicyEngineOptions {
        public boolean disableCustomConditions = false;
        public boolean disableTagPolicyEvaluation = false;
        public boolean disableTrieLookupPrefilter = false;
+       public boolean disablePolicyRefresher = false;
+       public boolean disableTagRetriever = false;
        public boolean cacheAuditResults = true;
        public boolean evaluateDelegateAdminOnly = false;
        public boolean enableTagEnricherWithLocalRefresher = false;
@@ -44,6 +46,8 @@ public class RangerPolicyEngineOptions {
                this.disableCustomConditions = other.disableCustomConditions;
                this.disableTagPolicyEvaluation = 
other.disableTagPolicyEvaluation;
                this.disableTrieLookupPrefilter = 
other.disableTrieLookupPrefilter;
+               this.disablePolicyRefresher = other.disablePolicyRefresher;
+               this.disableTagRetriever = other.disableTagRetriever;
                this.cacheAuditResults = other.cacheAuditResults;
                this.evaluateDelegateAdminOnly = 
other.evaluateDelegateAdminOnly;
                this.enableTagEnricherWithLocalRefresher = 
other.enableTagEnricherWithLocalRefresher;
@@ -57,6 +61,8 @@ public class RangerPolicyEngineOptions {
                disableCustomConditions = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.custom.conditions", false);
                disableTagPolicyEvaluation = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tagpolicy.evaluation", false);
                disableTrieLookupPrefilter = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.trie.lookup.prefilter", false);
+               disablePolicyRefresher = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.policy.refresher", false);
+               disableTagRetriever = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tag.retriever", false);
 
                cacheAuditResults = conf.getBoolean(propertyPrefix + 
".policyengine.option.cache.audit.results", true);
 
@@ -75,6 +81,8 @@ public class RangerPolicyEngineOptions {
                disableCustomConditions = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.custom.conditions", true);
                disableTagPolicyEvaluation = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tagpolicy.evaluation", true);
                disableTrieLookupPrefilter = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.trie.lookup.prefilter", false);
+               disablePolicyRefresher = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.policy.refresher", true);
+               disableTagRetriever = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tag.retriever", true);
 
                cacheAuditResults = false;
                evaluateDelegateAdminOnly = false;
@@ -89,6 +97,8 @@ public class RangerPolicyEngineOptions {
                disableCustomConditions = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.custom.conditions", true);
                disableTagPolicyEvaluation = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tagpolicy.evaluation", true);
                disableTrieLookupPrefilter = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.trie.lookup.prefilter", false);
+               disablePolicyRefresher = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.policy.refresher", true);
+               disableTagRetriever = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tag.retriever", true);
                optimizeTrieForRetrieval = conf.getBoolean(propertyPrefix + 
".policyengine.option.optimize.trie.for.retrieval", false);
 
 
@@ -103,6 +113,8 @@ public class RangerPolicyEngineOptions {
                disableCustomConditions = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.custom.conditions", true);
                disableTagPolicyEvaluation = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tagpolicy.evaluation", false);
                disableTrieLookupPrefilter = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.trie.lookup.prefilter", false);
+               disablePolicyRefresher = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.policy.refresher", true);
+               disableTagRetriever = conf.getBoolean(propertyPrefix + 
".policyengine.option.disable.tag.retriever", false);
                optimizeTrieForRetrieval = conf.getBoolean(propertyPrefix + 
".policyengine.option.optimize.trie.for.retrieval", false);
 
 
@@ -133,6 +145,8 @@ public class RangerPolicyEngineOptions {
                                        && this.disableCustomConditions == 
that.disableCustomConditions
                                        && this.disableTagPolicyEvaluation == 
that.disableTagPolicyEvaluation
                                        && this.disableTrieLookupPrefilter == 
that.disableTrieLookupPrefilter
+                                       && this.disablePolicyRefresher == 
that.disablePolicyRefresher
+                                       && this.disableTagRetriever == 
that.disableTagRetriever
                                        && this.cacheAuditResults == 
that.cacheAuditResults
                                        && this.evaluateDelegateAdminOnly == 
that.evaluateDelegateAdminOnly
                                        && 
this.enableTagEnricherWithLocalRefresher == 
that.enableTagEnricherWithLocalRefresher
@@ -152,6 +166,10 @@ public class RangerPolicyEngineOptions {
                ret *= 2;
                ret += disableTrieLookupPrefilter ? 1 : 0;
                ret *= 2;
+               ret += disablePolicyRefresher ? 1 : 0;
+               ret *= 2;
+               ret += disableTagRetriever ? 1 : 0;
+               ret *= 2;
                ret += cacheAuditResults ? 1 : 0;
                ret *= 2;
                ret += evaluateDelegateAdminOnly ? 1 : 0;
@@ -171,6 +189,8 @@ public class RangerPolicyEngineOptions {
                                ", disableContextEnrichers: " + 
disableContextEnrichers +
                                ", disableCustomConditions: " + 
disableContextEnrichers +
                                ", disableTagPolicyEvaluation: " + 
disableTagPolicyEvaluation +
+                               ", disablePolicyRefresher: " + 
disablePolicyRefresher +
+                               ", disableTagRetriever: " + disableTagRetriever 
+
                                ", enableTagEnricherWithLocalRefresher: " + 
enableTagEnricherWithLocalRefresher +
                                ", disableTrieLookupPrefilter: " + 
disableTrieLookupPrefilter +
                                ", optimizeTrieForRetrieval: " + 
optimizeTrieForRetrieval +
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 3a06497..008ee77 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
@@ -20,6 +20,7 @@
 package org.apache.ranger.plugin.policyengine;
 
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -55,6 +56,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static 
org.apache.ranger.plugin.contextenricher.RangerTagEnricher.TAG_RETRIEVER_CLASSNAME_OPTION;
 import static 
org.apache.ranger.plugin.policyengine.RangerPolicyEngine.PLUGIN_AUDIT_FILTER;
 
 public class RangerPolicyRepository {
@@ -174,7 +176,7 @@ public class RangerPolicyRepository {
         this.policyVersion = policyVersion;
     }
 
-    RangerPolicyRepository(ServicePolicies servicePolicies, 
RangerPluginContext pluginContext) {
+    public RangerPolicyRepository(ServicePolicies servicePolicies, 
RangerPluginContext pluginContext) {
         this(servicePolicies, pluginContext, null);
     }
 
@@ -1006,6 +1008,17 @@ public class RangerPolicyRepository {
                 if (enricherDef == null) {
                     continue;
                 }
+
+                if (options.disableTagRetriever && 
StringUtils.equals(enricherDef.getEnricher(), 
RangerTagEnricher.class.getName())) {
+                    if (MapUtils.isNotEmpty(enricherDef.getEnricherOptions())) 
{
+                        Map<String, String> enricherOptions = new 
HashMap<>(enricherDef.getEnricherOptions());
+
+                        enricherOptions.remove(TAG_RETRIEVER_CLASSNAME_OPTION);
+
+                        enricherDef = new 
RangerServiceDef.RangerContextEnricherDef(enricherDef.getItemId(), 
enricherDef.getName(), enricherDef.getEnricher(), enricherOptions);
+                    }
+                }
+
                 if (!options.disableContextEnrichers || 
options.enableTagEnricherWithLocalRefresher && 
StringUtils.equals(enricherDef.getEnricher(), 
RangerTagEnricher.class.getName())) {
                     // This will be true only if the engine is initialized 
within ranger-admin
                     RangerServiceDef.RangerContextEnricherDef 
contextEnricherDef = enricherDef;
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
index a1247bc..0aab809 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
@@ -95,6 +95,25 @@ public class RangerBasePlugin {
                this.chainedPlugins = initChainedPlugins();
        }
 
+       public RangerBasePlugin(RangerPluginConfig pluginConfig, 
ServicePolicies policies, ServiceTags tags, RangerRoles roles) {
+               this(pluginConfig);
+
+               init();
+
+               setPolicies(policies);
+               setRoles(roles);
+
+               if (tags != null) {
+                       RangerTagEnricher tagEnricher = getTagEnricher();
+
+                       if (tagEnricher != null) {
+                               tagEnricher.setServiceTags(tags);
+                       } else {
+                               LOG.warn("RangerBasePlugin(tagsVersion=" + 
tags.getTagVersion() + "): no tag enricher found. Plugin will not enforce 
tag-based policies");
+                       }
+               }
+       }
+
        public static AuditHandler getAuditProvider(String serviceName) {
                AuditProviderFactory providerFactory = 
RangerBasePlugin.getAuditProviderFactory(serviceName);
                AuditHandler         ret             = 
providerFactory.getAuditProvider();
@@ -179,16 +198,39 @@ public class RangerBasePlugin {
                        }
                }
 
-               refresher = new PolicyRefresher(this);
-               LOG.info("Created PolicyRefresher Thread(" + 
refresher.getName() + ")");
-               refresher.setDaemon(true);
-               refresher.startRefresher();
+               if 
(!pluginConfig.getPolicyEngineOptions().disablePolicyRefresher) {
+                       refresher = new PolicyRefresher(this);
+                       LOG.info("Created PolicyRefresher Thread(" + 
refresher.getName() + ")");
+                       refresher.setDaemon(true);
+                       refresher.startRefresher();
+               }
 
                for (RangerChainedPlugin chainedPlugin : chainedPlugins) {
                        chainedPlugin.init();
                }
        }
 
+       public long getPoliciesVersion() {
+               RangerPolicyEngine policyEngine = this.policyEngine;
+               Long               ret          = policyEngine != null ? 
policyEngine.getPolicyVersion() : null;
+
+               return ret != null ? ret : -1L;
+       }
+
+       public long getTagsVersion() {
+               RangerTagEnricher tagEnricher = getTagEnricher();
+               Long              ret         = tagEnricher != null ? 
tagEnricher.getServiceTagsVersion() : null;
+
+               return ret != null ? ret : -1L;
+       }
+
+       public long getRolesVersion() {
+               RangerPolicyEngine policyEngine = this.policyEngine;
+               Long               ret          = policyEngine != null ? 
policyEngine.getRoleVersion() : null;
+
+               return ret != null ? ret : -1L;
+       }
+
        public void setPolicies(ServicePolicies policies) {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> setPolicies(" + policies + ")");
@@ -680,7 +722,9 @@ public class RangerBasePlugin {
                        // Synch-up policies
                        long oldPolicyVersion = policyEngine.getPolicyVersion();
 
-                       refresher.syncPoliciesWithAdmin(accessTrigger);
+                       if (refresher != null) {
+                               refresher.syncPoliciesWithAdmin(accessTrigger);
+                       }
 
                        policyEngine = this.policyEngine; // might be updated 
in syncPoliciesWithAdmin()
 
@@ -795,7 +839,7 @@ public class RangerBasePlugin {
                int counter;
        }
 
-       private RangerTagEnricher getTagEnricher() {
+       public RangerTagEnricher getTagEnricher() {
                RangerTagEnricher ret         = null;
                RangerAuthContext authContext = getCurrentRangerAuthContext();
 

Reply via email to