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 d484e2b  RANGER-2510: Support for Incremental tag updates to improve 
performance - part 2
d484e2b is described below

commit d484e2bad26cc024e36908691138f8c4ac133f47
Author: Abhay Kulkarni <ab...@apache.org>
AuthorDate: Tue Oct 1 08:19:54 2019 -0700

    RANGER-2510: Support for Incremental tag updates to improve performance - 
part 2
---
 .../plugin/contextenricher/RangerTagEnricher.java  | 427 +++++++++++----------
 .../org/apache/ranger/db/XXPolicyChangeLogDao.java |  28 +-
 .../apache/ranger/db/XXServiceVersionInfoDao.java  |  43 ++-
 .../org/apache/ranger/db/XXTagChangeLogDao.java    |  20 +-
 .../apache/ranger/entity/XXPolicyChangeLog.java    |  42 +-
 .../org/apache/ranger/entity/XXTagChangeLog.java   |  36 +-
 .../java/org/apache/ranger/rest/PublicAPIsv2.java  |  24 +-
 .../apache/ranger/service/RangerTagDefService.java |   9 -
 .../main/resources/META-INF/jpa_named_queries.xml  |   5 -
 .../ranger/service/TestRangerTagDefService.java    |   8 -
 10 files changed, 318 insertions(+), 324 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 3063885..7434ec9 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
@@ -263,9 +263,6 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
                        LOG.info("ServiceTags is null for service " + 
serviceName);
                        enrichedServiceTags = null;
                } else  {
-                       RangerServiceDefHelper serviceDefHelper = new 
RangerServiceDefHelper(serviceDef, false);
-                       ResourceHierarchies    hierarchies      = new 
ResourceHierarchies();
-
                        RangerPerfTracer perf = null;
 
                        
if(RangerPerfTracer.isPerfTraceEnabled(PERF_SET_SERVICETAGS_LOG)) {
@@ -273,50 +270,14 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
                        }
 
                        if (!serviceTags.getIsDelta()) {
-                               if (LOG.isDebugEnabled()) {
-                                       LOG.debug("Received all service-tags");
-                               }
-                               if 
(CollectionUtils.isEmpty(serviceTags.getServiceResources())) {
-                                       LOG.info("There are no tagged resources 
for service " + serviceName);
-                                       enrichedServiceTags = null;
-                               } else {
-
-                                       List<RangerServiceResourceMatcher> 
resourceMatchers = new ArrayList<>();
-                                       List<RangerServiceResource> 
serviceResources = serviceTags.getServiceResources();
-
-                                       for (RangerServiceResource 
serviceResource : serviceResources) {
-                                               RangerServiceResourceMatcher 
serviceResourceMatcher = createRangerServiceResourceMatcher(serviceResource, 
serviceDefHelper, hierarchies);
-                                               if (serviceResourceMatcher != 
null) {
-                                                       
resourceMatchers.add(serviceResourceMatcher);
-                                               } else {
-                                                       LOG.error("Could not 
create service-resource-matcher for service-resource:[" + serviceResource + 
"]");
-                                               }
-                                       }
-
-                                       Map<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> serviceResourceTrie = null;
-
-                                       if (!disableTrieLookupPrefilter) {
-                                               serviceResourceTrie = new 
HashMap<>();
-
-                                               for 
(RangerServiceDef.RangerResourceDef resourceDef : serviceDef.getResources()) {
-                                                       
serviceResourceTrie.put(resourceDef.getName(), new 
RangerResourceTrie<>(resourceDef, resourceMatchers));
-                                               }
-                                       }
-
-                                       enrichedServiceTags = new 
EnrichedServiceTags(serviceTags, resourceMatchers, serviceResourceTrie);
-                               }
-
+                               processServiceTags(serviceTags);
                        } else {
                                if (LOG.isDebugEnabled()) {
                                        LOG.debug("Received service-tag 
deltas:" + serviceTags);
                                }
 
-                               ServiceTags delta          = serviceTags;
                                ServiceTags oldServiceTags = 
enrichedServiceTags != null ? enrichedServiceTags.getServiceTags() : new 
ServiceTags();
-
-                               ServiceTags                                     
              newServiceTags         = rebuildOnlyIndex ? oldServiceTags : 
RangerServiceTagsDeltaUtil.applyDelta(oldServiceTags, delta);
-                               List<RangerServiceResourceMatcher>              
              newResourceMatchers    = enrichedServiceTags != null ? 
enrichedServiceTags.getServiceResourceMatchers() : new ArrayList<>();
-                               Map<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> newServiceResourceTrie = 
enrichedServiceTags != null ? enrichedServiceTags.getServiceResourceTrie() : 
new HashMap<>();
+                               ServiceTags allServiceTags = rebuildOnlyIndex ? 
oldServiceTags : RangerServiceTagsDeltaUtil.applyDelta(oldServiceTags, 
serviceTags);
 
                                if (serviceTags.getTagsChangeExtent() == 
ServiceTags.TagsChangeExtent.NONE) {
                                        if (LOG.isDebugEnabled()) {
@@ -324,128 +285,15 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
                                        }
                                } else {
                                        if (serviceTags.getTagsChangeExtent() 
!= ServiceTags.TagsChangeExtent.TAGS) {
-                                               if (LOG.isDebugEnabled()) {
-                                                       LOG.debug("Delta 
contains changes other than tag attribute changes, [" + 
serviceTags.getTagsChangeExtent() + "]");
-                                               }
-
-                                               newServiceResourceTrie = new 
HashMap<>();
-                                               newResourceMatchers    = new 
ArrayList<>();
-
-                                               if (enrichedServiceTags != 
null) {
-                                                       
newResourceMatchers.addAll(enrichedServiceTags.getServiceResourceMatchers());
-                                               }
-
-                                               Map<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> serviceResourceTrie = 
enrichedServiceTags != null ? enrichedServiceTags.getServiceResourceTrie() : 
new HashMap<>();
-
-                                               for (Map.Entry<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> entry : 
serviceResourceTrie.entrySet()) {
-                                                       
RangerResourceTrie<RangerServiceResourceMatcher> resourceTrie = new 
RangerResourceTrie<>(entry.getValue());
-                                                       
newServiceResourceTrie.put(entry.getKey(), resourceTrie);
-                                               }
-
-                                               List<RangerServiceResource> 
changedServiceResources = delta.getServiceResources();
-
-                                               for (RangerServiceResource 
serviceResource : changedServiceResources) {
-
-                                                       if (enrichedServiceTags 
!= null) {
-
-                                                               if 
(LOG.isDebugEnabled()) {
-                                                                       
LOG.debug("Removing service-resource:[" + serviceResource + "] from trie-map");
-                                                               }
-
-                                                               // Remove 
existing serviceResource from the copy
-
-                                                               
RangerAccessResourceImpl accessResource = new RangerAccessResourceImpl();
-
-                                                               for 
(Map.Entry<String, RangerPolicy.RangerPolicyResource> entry : 
serviceResource.getResourceElements().entrySet()) {
-                                                                       
accessResource.setValue(entry.getKey(), entry.getValue());
-                                                               }
-                                                               if 
(LOG.isDebugEnabled()) {
-                                                                       
LOG.debug("RangerAccessResource:[" + accessResource + "] created to represent 
service-resource[" + serviceResource + "] to find evaluators from trie-map");
-                                                               }
-
-                                                               
List<RangerServiceResourceMatcher> oldMatchers = getEvaluators(accessResource, 
enrichedServiceTags);
-
-                                                               if 
(LOG.isDebugEnabled()) {
-                                                                       
LOG.debug("Found [" + oldMatchers.size() + "] matchers for service-resource[" + 
serviceResource + "]");
-                                                               }
-
-                                                               for 
(RangerServiceResourceMatcher matcher : oldMatchers) {
-
-                                                                       for 
(String resourceDefName : serviceResource.getResourceElements().keySet()) {
-                                                                               
RangerResourceTrie<RangerServiceResourceMatcher> trie = 
newServiceResourceTrie.get(resourceDefName);
-                                                                               
if (trie != null) {
-                                                                               
        trie.delete(serviceResource.getResourceElements().get(resourceDefName), 
matcher);
-                                                                               
} else {
-                                                                               
        LOG.error("Cannot find resourceDef with name:[" + resourceDefName + "]. 
Should NOT happen!!");
-                                                                               
        LOG.error("Setting tagVersion to -1 to ensure that in the next download 
all tags are downloaded");
-                                                                               
        newServiceTags.setTagVersion(-1L);
-                                                                               
}
-                                                                       }
-                                                               }
-
-                                                               // Remove old 
resource matchers
-                                                               
newResourceMatchers.removeAll(oldMatchers);
-
-                                                               if 
(LOG.isDebugEnabled()) {
-                                                                       
LOG.debug("Found and removed [" + oldMatchers.size() + "] matchers for 
service-resource[" + serviceResource + "] from trie-map");
-                                                               }
-                                                       }
-
-                                                       if 
(!StringUtils.isEmpty(serviceResource.getResourceSignature())) {
-
-                                                               
RangerServiceResourceMatcher resourceMatcher = 
createRangerServiceResourceMatcher(serviceResource, serviceDefHelper, 
hierarchies);
-
-                                                               if 
(resourceMatcher != null) {
-                                                                       for 
(String resourceDefName : serviceResource.getResourceElements().keySet()) {
-
-                                                                               
RangerResourceTrie<RangerServiceResourceMatcher> trie = 
newServiceResourceTrie.get(resourceDefName);
-
-                                                                               
if (trie == null) {
-                                                                               
        List<RangerServiceDef.RangerResourceDef> resourceDefs = 
serviceDef.getResources();
-                                                                               
        RangerServiceDef.RangerResourceDef found = null;
-                                                                               
        for (RangerServiceDef.RangerResourceDef resourceDef : resourceDefs) {
-                                                                               
                if (StringUtils.equals(resourceDef.getName(), resourceDefName)) 
{
-                                                                               
                        found = resourceDef;
-                                                                               
                        break;
-                                                                               
                }
-                                                                               
        }
-                                                                               
        if (found != null) {
-                                                                               
                List<RangerServiceResourceMatcher> resourceMatchers = new 
ArrayList<>();
-                                                                               
                trie = new RangerResourceTrie<>(found, resourceMatchers);
-                                                                               
                newServiceResourceTrie.put(resourceDefName, trie);
-                                                                               
        }
-                                                                               
}
-
-                                                                               
if (trie != null) {
-                                                                               
        trie.add(serviceResource.getResourceElements().get(resourceDefName), 
resourceMatcher);
-                                                                               
        if (LOG.isDebugEnabled()) {
-                                                                               
                LOG.debug("Added resource-matcher for service-resource:[" + 
serviceResource + "]");
-                                                                               
        }
-                                                                               
} else {
-                                                                               
        LOG.error("Could not create resource-matcher for resource: [" + 
serviceResource + "]. Should NOT happen!!");
-                                                                               
        LOG.error("Setting tagVersion to -1 to ensure that in the next download 
all tags are downloaded");
-                                                                               
        newServiceTags.setTagVersion(-1L);
-                                                                               
}
-                                                                       }
-                                                                       
newResourceMatchers.add(resourceMatcher);
-                                                               } else {
-                                                                       
LOG.error("Could not create resource-matcher for resource: [" + serviceResource 
+ "]. Should NOT happen!!");
-                                                                       
LOG.error("Setting tagVersion to -1 to ensure that in the next download all 
tags are downloaded");
-                                                                       
newServiceTags.setTagVersion(-1L);
-                                                               }
-                                                       } else {
-                                                               if 
(LOG.isDebugEnabled()) {
-                                                                       
LOG.debug("Service-resource:[id=" + serviceResource.getId() + "] is deleted as 
its resource-signature is empty. No need to create it!");
-                                                               }
-                                                       }
-                                               }
+                                               
processServiceTagDeltas(serviceTags, allServiceTags);
                                        } else {
                                                if (LOG.isDebugEnabled()) {
                                                        LOG.debug("Delta 
contains only tag attribute changes");
                                                }
+                                               
List<RangerServiceResourceMatcher>                            resourceMatchers  
  = enrichedServiceTags != null ? 
enrichedServiceTags.getServiceResourceMatchers() : new ArrayList<>();
+                                               Map<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> serviceResourceTrie = 
enrichedServiceTags != null ? enrichedServiceTags.getServiceResourceTrie() : 
new HashMap<>();
+                                               enrichedServiceTags = new 
EnrichedServiceTags(allServiceTags, resourceMatchers, serviceResourceTrie);
                                        }
-
-                                       enrichedServiceTags = new 
EnrichedServiceTags(newServiceTags, newResourceMatchers, 
newServiceResourceTrie);
                                }
                        }
                        RangerPerfTracer.logAlways(perf);
@@ -499,6 +347,10 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
        public boolean compare(RangerTagEnricher other) {
                boolean ret;
 
+               if (enrichedServiceTags == null || other == null || 
other.enrichedServiceTags == null) {
+                       return false;
+               }
+
                if (enrichedServiceTags.getServiceResourceTrie() != null && 
other.enrichedServiceTags.getServiceResourceTrie() != null) {
                        ret = 
enrichedServiceTags.getServiceResourceTrie().size() == 
other.enrichedServiceTags.getServiceResourceTrie().size();
 
@@ -543,65 +395,192 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
                return ret;
        }
 
-       private Set<RangerTagForEval> findMatchingTags(final 
RangerAccessRequest request, EnrichedServiceTags dataStore) {
+       private void processServiceTags(ServiceTags serviceTags) {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> RangerTagEnricher.findMatchingTags(" + 
request + ")");
+                       LOG.debug("Processing all service-tags");
                }
 
-               // To minimize chance for race condition between Tag-Refresher 
thread and access-evaluation thread
-               final EnrichedServiceTags enrichedServiceTags = dataStore != 
null ? dataStore : this.enrichedServiceTags;
-
-               Set<RangerTagForEval> ret = null;
+               boolean isInError = false;
 
-               RangerAccessResource resource = request.getResource();
-
-               if ((resource == null || resource.getKeys() == null || 
resource.getKeys().isEmpty()) && request.isAccessTypeAny()) {
-                       ret = 
enrichedServiceTags.getTagsForEmptyResourceAndAnyAccess();
+               if (CollectionUtils.isEmpty(serviceTags.getServiceResources())) 
{
+                       LOG.info("There are no tagged resources for service " + 
serviceName);
+                       enrichedServiceTags = null;
                } else {
 
-                       final List<RangerServiceResourceMatcher> 
serviceResourceMatchers = getEvaluators(resource, enrichedServiceTags);
+                       RangerServiceDefHelper serviceDefHelper = new 
RangerServiceDefHelper(serviceDef, false);
+                       ResourceHierarchies    hierarchies      = new 
ResourceHierarchies();
 
-                       if 
(CollectionUtils.isNotEmpty(serviceResourceMatchers)) {
+                       List<RangerServiceResourceMatcher> resourceMatchers = 
new ArrayList<>();
+                       List<RangerServiceResource>        serviceResources = 
serviceTags.getServiceResources();
 
-                               for (RangerServiceResourceMatcher 
resourceMatcher : serviceResourceMatchers) {
+                       for (RangerServiceResource serviceResource : 
serviceResources) {
+                               RangerServiceResourceMatcher 
serviceResourceMatcher = createRangerServiceResourceMatcher(serviceResource, 
serviceDefHelper, hierarchies);
+                               if (serviceResourceMatcher != null) {
+                                       
resourceMatchers.add(serviceResourceMatcher);
+                               } else {
+                                       LOG.error("Could not create 
service-resource-matcher for service-resource:[" + serviceResource + "]");
+                                       isInError = true;
+                                       break;
+                               }
+                       }
 
-                                       final 
RangerPolicyResourceMatcher.MatchType matchType = 
resourceMatcher.getMatchType(resource, request.getContext());
+                       if (isInError) {
+                               serviceTags.setTagVersion(-1L);
+                               LOG.error("Error in processing tag-deltas. Will 
continue to use old tags");
+                       } else {
+                               Map<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> serviceResourceTrie = null;
 
-                                       final boolean isMatched;
+                               if (!disableTrieLookupPrefilter) {
+                                       serviceResourceTrie = new HashMap<>();
 
-                                       if (request.isAccessTypeAny()) {
-                                               isMatched = matchType != 
RangerPolicyResourceMatcher.MatchType.NONE;
-                                       } else if 
(request.getResourceMatchingScope() == 
RangerAccessRequest.ResourceMatchingScope.SELF_OR_DESCENDANTS) {
-                                               isMatched = matchType != 
RangerPolicyResourceMatcher.MatchType.NONE;
-                                       } else {
-                                               isMatched = matchType == 
RangerPolicyResourceMatcher.MatchType.SELF || matchType == 
RangerPolicyResourceMatcher.MatchType.ANCESTOR;
+                                       for (RangerServiceDef.RangerResourceDef 
resourceDef : serviceDef.getResources()) {
+                                               
serviceResourceTrie.put(resourceDef.getName(), new 
RangerResourceTrie<>(resourceDef, resourceMatchers));
                                        }
+                               }
+                               enrichedServiceTags = new 
EnrichedServiceTags(serviceTags, resourceMatchers, serviceResourceTrie);
+                       }
+               }
+       }
 
-                                       if (isMatched) {
-                                               if (ret == null) {
-                                                       ret = new HashSet<>();
+       private void processServiceTagDeltas(ServiceTags deltas, ServiceTags 
allServiceTags) {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("Delta contains changes other than tag 
attribute changes, [" + deltas.getTagsChangeExtent() + "]");
+               }
+
+               boolean isInError = false;
+
+               RangerServiceDefHelper serviceDefHelper = new 
RangerServiceDefHelper(serviceDef, false);
+               ResourceHierarchies    hierarchies      = new 
ResourceHierarchies();
+
+               List<RangerServiceResourceMatcher>                            
resourceMatchers    = new ArrayList<>();
+               Map<String, RangerResourceTrie<RangerServiceResourceMatcher>> 
serviceResourceTrie = new HashMap<>();
+
+               if (enrichedServiceTags != null) {
+                       
resourceMatchers.addAll(enrichedServiceTags.getServiceResourceMatchers());
+                       for (Map.Entry<String, 
RangerResourceTrie<RangerServiceResourceMatcher>> entry : 
enrichedServiceTags.getServiceResourceTrie().entrySet()) {
+                               
RangerResourceTrie<RangerServiceResourceMatcher> resourceTrie = new 
RangerResourceTrie<>(entry.getValue());
+                               serviceResourceTrie.put(entry.getKey(), 
resourceTrie);
+                       }
+               }
+
+               List<RangerServiceResource> changedServiceResources = 
deltas.getServiceResources();
+
+               for (RangerServiceResource serviceResource : 
changedServiceResources) {
+
+                       if (removeOldServiceResource(serviceResource, 
resourceMatchers, serviceResourceTrie)) {
+
+                               if 
(!StringUtils.isEmpty(serviceResource.getResourceSignature())) {
+
+                                       RangerServiceResourceMatcher 
resourceMatcher = createRangerServiceResourceMatcher(serviceResource, 
serviceDefHelper, hierarchies);
+
+                                       if (resourceMatcher != null) {
+                                               for (String resourceDefName : 
serviceResource.getResourceElements().keySet()) {
+
+                                                       
RangerResourceTrie<RangerServiceResourceMatcher> trie = 
serviceResourceTrie.get(resourceDefName);
+
+                                                       if (trie == null) {
+                                                               
List<RangerServiceDef.RangerResourceDef> resourceDefs = 
serviceDef.getResources();
+                                                               
RangerServiceDef.RangerResourceDef found = null;
+                                                               for 
(RangerServiceDef.RangerResourceDef resourceDef : resourceDefs) {
+                                                                       if 
(StringUtils.equals(resourceDef.getName(), resourceDefName)) {
+                                                                               
found = resourceDef;
+                                                                               
break;
+                                                                       }
+                                                               }
+                                                               if (found != 
null) {
+                                                                       trie = 
new RangerResourceTrie<>(found, new ArrayList<>());
+                                                                       
serviceResourceTrie.put(resourceDefName, trie);
+                                                               }
+                                                       }
+
+                                                       if (trie != null) {
+                                                               
trie.add(serviceResource.getResourceElements().get(resourceDefName), 
resourceMatcher);
+                                                               if 
(LOG.isDebugEnabled()) {
+                                                                       
LOG.debug("Added resource-matcher for service-resource:[" + serviceResource + 
"]");
+                                                               }
+                                                       } else {
+                                                               
LOG.error("Could not create resource-matcher for resource: [" + serviceResource 
+ "]. Should NOT happen!!");
+                                                               
LOG.error("Setting tagVersion to -1 to ensure that in the next download all 
tags are downloaded");
+                                                               isInError = 
true;
+                                                       }
                                                }
-                                               
ret.addAll(getTagsForServiceResource(enrichedServiceTags.getServiceTags(), 
resourceMatcher.getServiceResource(), matchType));
+                                               
resourceMatchers.add(resourceMatcher);
+                                       } else {
+                                               LOG.error("Could not create 
resource-matcher for resource: [" + serviceResource + "]. Should NOT happen!!");
+                                               LOG.error("Setting tagVersion 
to -1 to ensure that in the next download all tags are downloaded");
+                                               isInError = true;
+                                       }
+                               } else {
+                                       if (LOG.isDebugEnabled()) {
+                                               
LOG.debug("Service-resource:[id=" + serviceResource.getId() + "] is deleted as 
its resource-signature is empty. No need to create it!");
                                        }
-
                                }
+                       } else {
+                               isInError = true;
+                       }
+                       if (isInError) {
+                               break;
                        }
                }
+               if (isInError) {
+                       LOG.error("Error in processing tag-deltas. Will 
continue to use old tags");
+                       deltas.setTagVersion(-1L);
+               } else {
+                       enrichedServiceTags = new 
EnrichedServiceTags(allServiceTags, resourceMatchers, serviceResourceTrie);
+               }
+
+       }
+
+       private boolean removeOldServiceResource(RangerServiceResource 
serviceResource, List<RangerServiceResourceMatcher> resourceMatchers, 
Map<String, RangerResourceTrie<RangerServiceResourceMatcher>> resourceTries) {
+               boolean ret = true;
+
+               if (enrichedServiceTags != null) {
 
-               if (CollectionUtils.isEmpty(ret)) {
                        if (LOG.isDebugEnabled()) {
-                               LOG.debug("RangerTagEnricher.findMatchingTags(" 
+ resource + ") - No tags Found ");
+                               LOG.debug("Removing service-resource:[" + 
serviceResource + "] from trie-map");
+                       }
+
+                       // Remove existing serviceResource from the copy
+
+                       RangerAccessResourceImpl accessResource = new 
RangerAccessResourceImpl();
+
+                       for (Map.Entry<String, 
RangerPolicy.RangerPolicyResource> entry : 
serviceResource.getResourceElements().entrySet()) {
+                               accessResource.setValue(entry.getKey(), 
entry.getValue());
                        }
-               } else {
                        if (LOG.isDebugEnabled()) {
-                               LOG.debug("RangerTagEnricher.findMatchingTags(" 
+ resource + ") - " + ret.size() + " tags Found ");
+                               LOG.debug("RangerAccessResource:[" + 
accessResource + "] created to represent service-resource[" + serviceResource + 
"] to find evaluators from trie-map");
                        }
-               }
 
-               if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== RangerTagEnricher.findMatchingTags(" + 
request + ")");
-               }
+                       List<RangerServiceResourceMatcher> oldMatchers = 
getEvaluators(accessResource, enrichedServiceTags);
 
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("Found [" + oldMatchers.size() + "] 
matchers for service-resource[" + serviceResource + "]");
+                       }
+
+                       for (RangerServiceResourceMatcher matcher : 
oldMatchers) {
+
+                               for (String resourceDefName : 
serviceResource.getResourceElements().keySet()) {
+                                       
RangerResourceTrie<RangerServiceResourceMatcher> trie = 
resourceTries.get(resourceDefName);
+                                       if (trie != null) {
+                                               
trie.delete(serviceResource.getResourceElements().get(resourceDefName), 
matcher);
+                                       } else {
+                                               LOG.error("Cannot find 
resourceDef with name:[" + resourceDefName + "]. Should NOT happen!!");
+                                               LOG.error("Setting tagVersion 
to -1 to ensure that in the next download all tags are downloaded");
+                                               ret = false;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       // Remove old resource matchers
+                       if (ret) {
+                               resourceMatchers.removeAll(oldMatchers);
+
+                               if (LOG.isDebugEnabled()) {
+                                       LOG.debug("Found and removed [" + 
oldMatchers.size() + "] matchers for service-resource[" + serviceResource + "] 
from trie-map");
+                               }
+                       }
+               }
                return ret;
        }
 
@@ -677,6 +656,68 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
                }
        }
 
+       private Set<RangerTagForEval> findMatchingTags(final 
RangerAccessRequest request, EnrichedServiceTags dataStore) {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> RangerTagEnricher.findMatchingTags(" + 
request + ")");
+               }
+
+               // To minimize chance for race condition between Tag-Refresher 
thread and access-evaluation thread
+               final EnrichedServiceTags enrichedServiceTags = dataStore != 
null ? dataStore : this.enrichedServiceTags;
+
+               Set<RangerTagForEval> ret = null;
+
+               RangerAccessResource resource = request.getResource();
+
+               if ((resource == null || resource.getKeys() == null || 
resource.getKeys().isEmpty()) && request.isAccessTypeAny()) {
+                       ret = 
enrichedServiceTags.getTagsForEmptyResourceAndAnyAccess();
+               } else {
+
+                       final List<RangerServiceResourceMatcher> 
serviceResourceMatchers = getEvaluators(resource, enrichedServiceTags);
+
+                       if 
(CollectionUtils.isNotEmpty(serviceResourceMatchers)) {
+
+                               for (RangerServiceResourceMatcher 
resourceMatcher : serviceResourceMatchers) {
+
+                                       final 
RangerPolicyResourceMatcher.MatchType matchType = 
resourceMatcher.getMatchType(resource, request.getContext());
+
+                                       final boolean isMatched;
+
+                                       if (request.isAccessTypeAny()) {
+                                               isMatched = matchType != 
RangerPolicyResourceMatcher.MatchType.NONE;
+                                       } else if 
(request.getResourceMatchingScope() == 
RangerAccessRequest.ResourceMatchingScope.SELF_OR_DESCENDANTS) {
+                                               isMatched = matchType != 
RangerPolicyResourceMatcher.MatchType.NONE;
+                                       } else {
+                                               isMatched = matchType == 
RangerPolicyResourceMatcher.MatchType.SELF || matchType == 
RangerPolicyResourceMatcher.MatchType.ANCESTOR;
+                                       }
+
+                                       if (isMatched) {
+                                               if (ret == null) {
+                                                       ret = new HashSet<>();
+                                               }
+                                               
ret.addAll(getTagsForServiceResource(enrichedServiceTags.getServiceTags(), 
resourceMatcher.getServiceResource(), matchType));
+                                       }
+
+                               }
+                       }
+               }
+
+               if (CollectionUtils.isEmpty(ret)) {
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("RangerTagEnricher.findMatchingTags(" 
+ resource + ") - No tags Found ");
+                       }
+               } else {
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("RangerTagEnricher.findMatchingTags(" 
+ resource + ") - " + ret.size() + " tags Found ");
+                       }
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== RangerTagEnricher.findMatchingTags(" + 
request + ")");
+               }
+
+               return ret;
+       }
+
        private List<RangerServiceResourceMatcher> 
getEvaluators(RangerAccessResource resource, EnrichedServiceTags 
enrichedServiceTags) {
                if(LOG.isDebugEnabled()) {
                        LOG.debug("==> RangerTagEnricher.getEvaluators(" + 
(resource != null ? resource.getAsString() : null) + ")");
@@ -901,7 +942,7 @@ public class RangerTagEnricher extends 
RangerAbstractContextEnricher {
 
                                        if (serviceTags != null) {
                                                
tagEnricher.setServiceTags(serviceTags);
-                                               if (serviceTags.getIsDelta()) {
+                                               if (serviceTags.getIsDelta() && 
serviceTags.getTagVersion() != -1L) {
                                                        
saveToCache(tagEnricher.enrichedServiceTags.serviceTags);
                                                }
                                                
LOG.info("RangerTagRefresher.populateTags() - Updated tags-cache to new version 
of tags, lastKnownVersion=" + lastKnownVersion + "; newVersion="
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
index 7055391..0a1d1c1 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyChangeLogDao.java
@@ -41,6 +41,14 @@ public class XXPolicyChangeLogDao extends 
BaseDao<XXPolicyChangeLog> {
 
     private static final Log LOG = 
LogFactory.getLog(XXPolicyChangeLogDao.class);
 
+    private static final int POLICY_CHANGE_LOG_RECORD_ID_COLUMN_NUMBER         
    = 0;
+    private static final int 
POLICY_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER    = 1;
+    private static final int 
POLICY_CHANGE_LOG_RECORD_POLICY_VERSION_COLUMN_NUMBER = 2;
+    private static final int 
POLICY_CHANGE_LOG_RECORD_SERVICE_TYPE_COLUMN_NUMBER   = 3;
+    private static final int 
POLICY_CHANGE_LOG_RECORD_POLICY_TYPE_COLUMN_NUMBER    = 4;
+    private static final int POLICY_CHANGE_LOG_RECORD_POLICY_ID_COLUMN_NUMBER  
    = 5;
+    private static final int POLICY_CHANGE_LOG_RECORD_ZONE_NAME_COLUMN_NUMBER  
    = 6;
+
     /**
      * Default Constructor
      */
@@ -57,14 +65,14 @@ public class XXPolicyChangeLogDao extends 
BaseDao<XXPolicyChangeLog> {
                     .setParameter("serviceId", serviceId)
                     .getResultList();
 
-            // Ensure that some record has the same version as the 
base-version from where the records are fetched
+            // Ensure that first record has the same version as the 
base-version from where the records are fetched
             if (CollectionUtils.isNotEmpty(logs)) {
                 Iterator<Object[]> iter = logs.iterator();
                 boolean foundAndRemoved = false;
 
                 while (iter.hasNext()) {
                     Object[] record = iter.next();
-                    Long recordVersion = (Long) record[2];
+                    Long recordVersion = (Long) 
record[POLICY_CHANGE_LOG_RECORD_POLICY_VERSION_COLUMN_NUMBER];
                     if (version.equals(recordVersion)) {
                         iter.remove();
                         foundAndRemoved = true;
@@ -124,10 +132,10 @@ public class XXPolicyChangeLogDao extends 
BaseDao<XXPolicyChangeLog> {
 
                 RangerPolicy policy;
 
-                Long    logRecordId      = (Long) log[0];
-                Integer policyChangeType = (Integer) log[1];
-                String  serviceType      = (String) log[3];
-                Long    policyId         = (Long) log[5];
+                Long    logRecordId      = (Long) 
log[POLICY_CHANGE_LOG_RECORD_ID_COLUMN_NUMBER];
+                Integer policyChangeType = (Integer) 
log[POLICY_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER];
+                String  serviceType      = (String) 
log[POLICY_CHANGE_LOG_RECORD_SERVICE_TYPE_COLUMN_NUMBER];
+                Long    policyId         = (Long) 
log[POLICY_CHANGE_LOG_RECORD_POLICY_ID_COLUMN_NUMBER];
 
                 if (policyId != null) {
                     XXPolicy xxPolicy = 
daoManager.getXXPolicy().getById(policyId);
@@ -148,16 +156,16 @@ public class XXPolicyChangeLogDao extends 
BaseDao<XXPolicyChangeLog> {
                         // Create a dummy policy as the policy cannot be found 
- probably already deleted
                         policy = new RangerPolicy();
                         policy.setId(policyId);
-                        policy.setVersion((Long) log[2]);
-                        policy.setPolicyType((Integer) log[4]);
-                        policy.setZoneName((String) log[6]);
+                        policy.setVersion((Long) 
log[POLICY_CHANGE_LOG_RECORD_POLICY_VERSION_COLUMN_NUMBER]);
+                        policy.setPolicyType((Integer) 
log[POLICY_CHANGE_LOG_RECORD_POLICY_TYPE_COLUMN_NUMBER]);
+                        policy.setZoneName((String) 
log[POLICY_CHANGE_LOG_RECORD_ZONE_NAME_COLUMN_NUMBER]);
                     }
                     policy.setServiceType(serviceType);
 
                     ret.add(new RangerPolicyDelta(logRecordId, 
policyChangeType, policy));
                 } else {
                     if (LOG.isDebugEnabled()) {
-                        LOG.debug("policyId is null! log-record-id:[" + 
logRecordId + ", service-type:[" + log[3] + "], policy-change-type:[" + log[1] 
+ "]");
+                        LOG.debug("policyId is null! log-record-id:[" + 
logRecordId + ", service-type:[" + 
log[POLICY_CHANGE_LOG_RECORD_SERVICE_TYPE_COLUMN_NUMBER] + "], 
policy-change-type:[" + log[POLICY_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER] 
+ "]");
                     }
                     ret.clear();
                     ret.add(new RangerPolicyDelta(logRecordId, 
policyChangeType, null));
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
index 9f6f024..b18f8f2 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
@@ -22,6 +22,8 @@ import java.util.List;
 import javax.persistence.NoResultException;
 
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ranger.biz.ServiceDBStore;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXServiceVersionInfo;
@@ -33,6 +35,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class XXServiceVersionInfoDao extends BaseDao<XXServiceVersionInfo> {
 
+       private static final Log LOG = 
LogFactory.getLog(XXServiceVersionInfoDao.class);
+
        /**
         * Default Constructor
         */
@@ -74,6 +78,7 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
 
        public void updateServiceVersionInfoForTagResourceMapCreate(Long 
resourceId, Long tagId) {
                if (resourceId == null || tagId == null) {
+                       LOG.warn("Unexpected null value for resourceId and/or 
tagId");
                        return;
                }
 
@@ -82,12 +87,12 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
 
                        updateTagVersionAndTagUpdateTime(serviceVersionInfos, 
resourceId, tagId);
                } catch (NoResultException e) {
-                       return;
                }
        }
 
        public void updateServiceVersionInfoForTagResourceMapDelete(Long 
resourceId, Long tagId) {
                if (resourceId == null || tagId == null) {
+                       LOG.warn("Unexpected null value for resourceId and/or 
tagId");
                        return;
                }
 
@@ -96,11 +101,11 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
 
                        updateTagVersionAndTagUpdateTime(serviceVersionInfos, 
resourceId, tagId);
                } catch (NoResultException e) {
-                       return;
                }
        }
        public void updateServiceVersionInfoForServiceResourceUpdate(Long 
resourceId) {
                if (resourceId == null) {
+                       LOG.warn("Unexpected null value for resourceId");
                        return;
                }
 
@@ -111,12 +116,12 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
 
                        updateTagVersionAndTagUpdateTime(serviceVersionInfos, 
resourceId, tagId);
                } catch (NoResultException e) {
-                       return;
                }
        }
 
        public void updateServiceVersionInfoForTagUpdate(Long tagId) {
                if (tagId == null) {
+                       LOG.warn("Unexpected null value for tagId");
                        return;
                }
 
@@ -126,13 +131,6 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
 
                        updateTagVersionAndTagUpdateTime(serviceVersionInfos, 
resourceId, tagId);
                } catch (NoResultException e) {
-                       return;
-               }
-       }
-
-       public void updateServiceVersionInfoForTagDefUpdate(Long tagDefId) {
-               if (tagDefId != null) {
-                       return;
                }
        }
 
@@ -140,23 +138,26 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
 
                if(CollectionUtils.isNotEmpty(serviceVersionInfos) || 
(resourceId == null && tagId == null)) {
 
-                       for (XXServiceVersionInfo serviceVersionInfo : 
serviceVersionInfos) {
+                       final ServiceDBStore.VERSION_TYPE versionType = 
ServiceDBStore.VERSION_TYPE.TAG_VERSION;
+                       final ServiceTags.TagsChangeType  tagChangeType;
 
-                               final Long                        serviceId   = 
serviceVersionInfo.getServiceId();
-                               final ServiceDBStore.VERSION_TYPE versionType = 
ServiceDBStore.VERSION_TYPE.TAG_VERSION;
-                               final ServiceTags.TagsChangeType  tagChangeType;
+                       if (tagId == null) {
+                               tagChangeType = 
ServiceTags.TagsChangeType.SERVICE_RESOURCE_UPDATE;
+                       } else if (resourceId == null) {
+                               tagChangeType = 
ServiceTags.TagsChangeType.TAG_UPDATE;
+                       } else {
+                               tagChangeType = 
ServiceTags.TagsChangeType.TAG_RESOURCE_MAP_UPDATE;
+                       }
 
-                               if (tagId == null) {
-                                       tagChangeType = 
ServiceTags.TagsChangeType.SERVICE_RESOURCE_UPDATE;
-                               } else if (resourceId == null) {
-                                       tagChangeType = 
ServiceTags.TagsChangeType.TAG_UPDATE;
-                               } else {
-                                       tagChangeType = 
ServiceTags.TagsChangeType.TAG_RESOURCE_MAP_UPDATE;
-                               }
+                       for (XXServiceVersionInfo serviceVersionInfo : 
serviceVersionInfos) {
 
+                               final Long     serviceId             = 
serviceVersionInfo.getServiceId();
                                final Runnable serviceVersionUpdater = new 
ServiceDBStore.ServiceVersionUpdater(daoManager, serviceId, versionType, 
tagChangeType, resourceId, tagId);
+
                                
daoManager.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(serviceVersionUpdater);
                        }
+               } else {
+                       LOG.warn("Unexpected empty list of serviceVersionInfos 
and/or null value for resourceId and tagId");
                }
 
        }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXTagChangeLogDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXTagChangeLogDao.java
index ef65e9a..2ca2200 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXTagChangeLogDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXTagChangeLogDao.java
@@ -37,6 +37,12 @@ public class XXTagChangeLogDao extends 
BaseDao<XXTagChangeLog> {
 
     private static final Log LOG = LogFactory.getLog(XXTagChangeLogDao.class);
 
+    private static final int TAG_CHANGE_LOG_RECORD_ID_COLUMN_NUMBER            
      = 0;
+    private static final int TAG_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER   
      = 1;
+    private static final int TAG_CHANGE_LOG_RECORD_VERSION_ID_COLUMN_NUMBER    
      = 2;
+    private static final int 
TAG_CHANGE_LOG_RECORD_SERVICE_RESOURCE_ID_COLUMN_NUMBER = 3;
+    private static final int TAG_CHANGE_LOG_RECORD_TAG_ID_COLUMN_NUMBER        
      = 4;
+
     /**
      * Default Constructor
      */
@@ -52,14 +58,14 @@ public class XXTagChangeLogDao extends 
BaseDao<XXTagChangeLog> {
                     .setParameter("version", version)
                     .setParameter("serviceId", serviceId)
                     .getResultList();
-            // Ensure that some record has the same version as the 
base-version from where the records are fetched
+            // Ensure that first record has the same version as the 
base-version from where the records are fetched
             if (CollectionUtils.isNotEmpty(logs)) {
                 Iterator<Object[]> iter = logs.iterator();
                 boolean foundAndRemoved = false;
 
                 while (iter.hasNext()) {
                     Object[] record = iter.next();
-                    Long recordVersion = (Long) record[2];
+                    Long recordVersion = (Long) 
record[TAG_CHANGE_LOG_RECORD_VERSION_ID_COLUMN_NUMBER];
                     if (version.equals(recordVersion)) {
                         iter.remove();
                         foundAndRemoved = true;
@@ -103,11 +109,11 @@ public class XXTagChangeLogDao extends 
BaseDao<XXTagChangeLog> {
 
             for (Object[] log : queryResult) {
 
-                Long logRecordId = (Long) log[0];
-                Integer tagChangeType = (Integer) log[1];
-                Long serviceTagsVersion = (Long) log[2];
-                Long serviceResourceId = (Long) log[3];
-                Long tagId = (Long) log[4];
+                Long logRecordId        = (Long) 
log[TAG_CHANGE_LOG_RECORD_ID_COLUMN_NUMBER];
+                Integer tagChangeType   = (Integer) 
log[TAG_CHANGE_LOG_RECORD_CHANGE_TYPE_COLUMN_NUMBER];
+                Long serviceTagsVersion = (Long) 
log[TAG_CHANGE_LOG_RECORD_VERSION_ID_COLUMN_NUMBER];
+                Long serviceResourceId  = (Long) 
log[TAG_CHANGE_LOG_RECORD_SERVICE_RESOURCE_ID_COLUMN_NUMBER];
+                Long tagId              = (Long) 
log[TAG_CHANGE_LOG_RECORD_TAG_ID_COLUMN_NUMBER];
 
                 ret.add(new XXTagChangeLog(logRecordId, tagChangeType, 
serviceTagsVersion, serviceResourceId, tagId));
             }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyChangeLog.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyChangeLog.java
index df87f70..bc48d4a 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyChangeLog.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyChangeLog.java
@@ -20,6 +20,7 @@
 package org.apache.ranger.entity;
 
 import java.util.Date;
+import java.util.Objects;
 
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
@@ -188,45 +189,12 @@ public class XXPolicyChangeLog implements 
java.io.Serializable {
             return false;
         if (getClass() != obj.getClass())
             return false;
+
         XXPolicyChangeLog other = (XXPolicyChangeLog) obj;
-        if ((this.id == null && other.id != null) || (this.id != null && 
!this.id.equals(other.id))) {
-            return false;
-        }
-        if ((this.serviceId == null && other.serviceId != null) || 
(this.serviceId != null && !this.serviceId.equals(other.serviceId))) {
-            return false;
-        }
-        if ((this.policyVersion == null && other.policyVersion != null) || 
(this.policyVersion != null && 
!this.policyVersion.equals(other.policyVersion))) {
-            return false;
-        }
-        if ((this.createTime == null && other.createTime != null) || 
(this.createTime != null && !this.createTime.equals(other.createTime))) {
-            return false;
-        }
-        if ((this.changeType == null && other.changeType != null) || 
(this.changeType != null && !this.changeType.equals(other.changeType))) {
-            return false;
-        }
-               if ((this.serviceType == null && other.serviceType != null) || 
(this.serviceType != null && !this.serviceType.equals(other.serviceType))) {
-                       return false;
-               }
-               if ((this.policyType == null && other.policyType != null) || 
(this.policyType != null && !this.policyType.equals(other.policyType))) {
-                       return false;
-               }
-        if ((this.zoneName == null && other.zoneName != null) || 
(this.zoneName != null && !this.zoneName.equals(other.zoneName))) {
-            return false;
-        }
-               if ((this.policyId == null && other.policyId != null) || 
(this.policyId != null && !this.policyId.equals(other.policyId))) {
-                       return false;
-               }
-               return true;
-    }
 
-    public static boolean equals(Object object1, Object object2) {
-        if (object1 == object2) {
-            return true;
-        }
-        if ((object1 == null) || (object2 == null)) {
-            return false;
-        }
-        return object1.equals(object2);
+        return Objects.equals(this.id, other.id) && 
Objects.equals(this.serviceId, other.serviceId) && 
Objects.equals(this.policyVersion, other.policyVersion)
+                && Objects.equals(this.createTime, other.createTime) && 
Objects.equals(this.changeType, other.changeType) && 
Objects.equals(this.serviceType, other.serviceType)
+                && Objects.equals(this.policyType, other.policyType) && 
Objects.equals(this.zoneName, other.zoneName) && Objects.equals(this.policyId, 
other.policyId);
     }
 
 }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXTagChangeLog.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXTagChangeLog.java
index c3eb144..9f1002c 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXTagChangeLog.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTagChangeLog.java
@@ -20,6 +20,7 @@
 package org.apache.ranger.entity;
 
 import java.util.Date;
+import java.util.Objects;
 
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
@@ -179,39 +180,12 @@ public class XXTagChangeLog implements 
java.io.Serializable {
             return false;
         if (getClass() != obj.getClass())
             return false;
+
         XXTagChangeLog other = (XXTagChangeLog) obj;
-        if ((this.id == null && other.id != null) || (this.id != null && 
!this.id.equals(other.id))) {
-            return false;
-        }
-        if ((this.createTime == null && other.createTime != null) || 
(this.createTime != null && !this.createTime.equals(other.createTime))) {
-            return false;
-        }
-        if ((this.serviceId == null && other.serviceId != null) || 
(this.serviceId != null && !this.serviceId.equals(other.serviceId))) {
-            return false;
-        }
-        if ((this.changeType == null && other.changeType != null) || 
(this.changeType != null && !this.changeType.equals(other.changeType))) {
-            return false;
-        }
-        if ((this.serviceTagsVersion == null && other.serviceTagsVersion != 
null) || (this.serviceTagsVersion != null && 
!this.serviceTagsVersion.equals(other.serviceTagsVersion))) {
-            return false;
-        }
-        if ((this.serviceResourceId == null && other.serviceResourceId != 
null) || (this.serviceResourceId != null && 
!this.serviceResourceId.equals(other.serviceResourceId))) {
-            return false;
-        }
-        if ((this.tagId == null && other.tagId != null) || (this.tagId != null 
&& !this.tagId.equals(other.tagId))) {
-            return false;
-        }
-        return true;
-    }
 
-    public static boolean equals(Object object1, Object object2) {
-        if (object1 == object2) {
-            return true;
-        }
-        if ((object1 == null) || (object2 == null)) {
-            return false;
-        }
-        return object1.equals(object2);
+        return Objects.equals(this.id, other.id) && 
Objects.equals(this.createTime, other.createTime) && 
Objects.equals(this.serviceId, other.serviceId)
+                && Objects.equals(this.changeType, other.changeType) && 
Objects.equals(this.serviceTagsVersion, other.serviceTagsVersion)
+                && Objects.equals(this.serviceResourceId, 
other.serviceResourceId) && Objects.equals(this.tagId, other.tagId);
     }
 
 }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java 
b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
index c33841d..f329d17 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
@@ -62,6 +62,9 @@ public class PublicAPIsv2 {
        ServiceREST serviceREST;
 
        @Autowired
+       TagREST tagREST;
+
+       @Autowired
        SecurityZoneREST securityZoneRest;
 
        @Autowired
@@ -527,15 +530,30 @@ public class PublicAPIsv2 {
        @DELETE
        @Path("/api/server/policydeltas")
        @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-       public void deletePolicyDeltas(@DefaultValue("7") @QueryParam("days") 
Integer olderThan, @DefaultValue("false") 
@QueryParam("reloadServicePoliciesCache") Boolean reloadServicePoliciesCache, 
@Context HttpServletRequest request) {
+       public void deletePolicyDeltas(@DefaultValue("7") @QueryParam("days") 
Integer olderThan, @Context HttpServletRequest request) {
                if (logger.isDebugEnabled()) {
-                       logger.debug("==> PublicAPIsv2.deletePolicyDeltas(" + 
olderThan + ", " + reloadServicePoliciesCache + ")");
+                       logger.debug("==> PublicAPIsv2.deletePolicyDeltas(" + 
olderThan + ")");
                }
 
                serviceREST.deletePolicyDeltas(olderThan, request);
 
                if (logger.isDebugEnabled()) {
-                       logger.debug("<== PublicAPIsv2.deletePolicyDeltas(" + 
olderThan + ", " + reloadServicePoliciesCache + ")");
+                       logger.debug("<== PublicAPIsv2.deletePolicyDeltas(" + 
olderThan + ")");
+               }
+       }
+
+       @DELETE
+       @Path("/api/server/tagdeltas")
+       @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+       public void deleteTagDeltas(@DefaultValue("7") @QueryParam("days") 
Integer olderThan, @Context HttpServletRequest request) {
+               if (logger.isDebugEnabled()) {
+                       logger.debug("==> PublicAPIsv2.deleteTagDeltas(" + 
olderThan + ")");
+               }
+
+               tagREST.deleteTagDeltas(olderThan, request);
+
+               if (logger.isDebugEnabled()) {
+                       logger.debug("<== PublicAPIsv2.deleteTagDeltas(" + 
olderThan + ")");
                }
        }
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
index d4350b6..8f67799 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
@@ -52,15 +52,6 @@ public class RangerTagDefService extends 
RangerTagDefServiceBase<XXTagDef, Range
 
        }
 
-       @Override
-       public RangerTagDef postUpdate(XXTagDef tagDef) {
-               RangerTagDef ret = super.postUpdate(tagDef);
-
-               
daoMgr.getXXServiceVersionInfo().updateServiceVersionInfoForTagDefUpdate(tagDef.getId());
-
-               return ret;
-       }
-
        public RangerTagDef getPopulatedViewObject(XXTagDef xObj) {
                return populateViewBean(xObj);
        }
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml 
b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index 9714fa9..ab8e675 100755
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -1563,11 +1563,6 @@
 
 
        <!-- XXTagChangeLog -->
-       <named-query name="XXTagChangeLog.findByServiceId">
-               <query>
-                       select obj from XXTagChangeLog obj where obj.serviceId 
= :serviceId
-               </query>
-       </named-query>
        <named-query name="XXTagChangeLog.findSinceVersion">
                <query>
                        select obj.id, obj.changeType, obj.serviceTagsVersion, 
obj.serviceResourceId, obj.tagId from
diff --git 
a/security-admin/src/test/java/org/apache/ranger/service/TestRangerTagDefService.java
 
b/security-admin/src/test/java/org/apache/ranger/service/TestRangerTagDefService.java
index 160a53c..c031c94 100644
--- 
a/security-admin/src/test/java/org/apache/ranger/service/TestRangerTagDefService.java
+++ 
b/security-admin/src/test/java/org/apache/ranger/service/TestRangerTagDefService.java
@@ -21,7 +21,6 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.ranger.db.RangerDaoManager;
-import org.apache.ranger.db.XXServiceVersionInfoDao;
 import org.apache.ranger.db.XXTagDefDao;
 import org.apache.ranger.entity.XXTagAttributeDef;
 import org.apache.ranger.entity.XXTagDef;
@@ -79,18 +78,11 @@ public class TestRangerTagDefService {
                xxTagAttributeDef.setId(id);
                xxTagAttributeDef.setName(name);
                tagAttrDefList.add(xxTagAttributeDef);
-               
-               XXServiceVersionInfoDao xxServiceVersionInfoDao = 
Mockito.mock(XXServiceVersionInfoDao.class);
 
-               
Mockito.when(daoMgr.getXXServiceVersionInfo()).thenReturn(xxServiceVersionInfoDao);
-               
Mockito.doNothing().when(xxServiceVersionInfoDao).updateServiceVersionInfoForTagDefUpdate(tagDef.getId());
-               
                RangerTagDef result = rangerTagDefService.postUpdate(tagDef);
                Assert.assertEquals(result.getId(), 
tagAttrDefList.get(0).getId());
                Assert.assertEquals(result.getName(), 
tagAttrDefList.get(0).getName());
 
-               Mockito.verify(daoMgr).getXXServiceVersionInfo();
-               
Mockito.verify(xxServiceVersionInfoDao).updateServiceVersionInfoForTagDefUpdate(tagDef.getId());
        }
                
        @Test

Reply via email to