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

mehul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit c76f8eecf181f813774d8e7a6546f1666287eefe
Author: Andrew <[email protected]>
AuthorDate: Thu Oct 17 00:24:28 2019 -0700

    RANGER-2594: Improve policy validation performance during delete
    
    Signed-off-by: Mehul Parikh <[email protected]>
---
 .../ranger/plugin/model/validation/RangerPolicyValidator.java    | 2 +-
 .../apache/ranger/plugin/model/validation/RangerValidator.java   | 9 +++++++++
 .../main/java/org/apache/ranger/plugin/store/ServiceStore.java   | 2 ++
 .../src/main/java/org/apache/ranger/biz/ServiceDBStore.java      | 5 +++++
 .../src/main/java/org/apache/ranger/db/XXPolicyDao.java          | 7 +++++++
 security-admin/src/main/resources/META-INF/jpa_named_queries.xml | 4 ++++
 6 files changed, 28 insertions(+), 1 deletion(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
index a854107..fb0afba 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
@@ -94,7 +94,7 @@ public class RangerPolicyValidator extends RangerValidator {
                                        .becauseOf(error.getMessage("id"))
                                        .build());
                        valid = false;
-               } else if (getPolicy(id) == null) {
+               } else if (policyExists(id)) {
                        if (LOG.isDebugEnabled()) {
                                LOG.debug("No policy found for id[" + id + "]! 
ok!");
                        }
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidator.java
index 74653b2..c4ec63b 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidator.java
@@ -263,6 +263,15 @@ public abstract class RangerValidator {
                return result;
        }
 
+       boolean policyExists(Long id) {
+               try {
+                       return _store.policyExists(id);
+               } catch (Exception e) {
+                       LOG.debug("Encountred exception while retrieving policy 
from service store!", e);
+                       return false;
+               }
+       }
+
        RangerPolicy getPolicy(Long id) {
                
                if(LOG.isDebugEnabled()) {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java
index ba7407f..4af457e 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java
@@ -73,6 +73,8 @@ public interface ServiceStore {
 
        void deletePolicy(RangerPolicy policy) throws Exception;
 
+       boolean policyExists(Long id) throws Exception;
+
        RangerPolicy getPolicy(Long id) throws Exception;
 
        List<RangerPolicy> getPolicies(SearchFilter filter) throws Exception;
diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index ec44aa1..866eed9 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -2192,6 +2192,11 @@ public class ServiceDBStore extends AbstractServiceStore 
{
        }
 
        @Override
+       public boolean policyExists(Long id) throws Exception {
+               return daoMgr.getXXPolicy().getCountById(id) > 0;
+       }
+
+       @Override
        public RangerPolicy getPolicy(Long id) throws Exception {
                return policyService.read(id);
        }
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
index b242171..4c501e4 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
@@ -40,6 +40,13 @@ public class XXPolicyDao extends BaseDao<XXPolicy> {
                super(daoManager);
        }
 
+       public long getCountById(Long policyId) {
+               return getEntityManager()
+                                       .createNamedQuery("XXPolicy.countById", 
Long.class)
+                                       .setParameter("policyId", policyId)
+                                       .getSingleResult();
+       }
+
        public XXPolicy findByNameAndServiceId(String polName, Long serviceId) {
                return findByNameAndServiceIdAndZoneId(polName, serviceId, 
RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID);
        }
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 6cc4799..bc8062c 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
@@ -266,6 +266,10 @@
 
        <!-- XXPolicy -->
 
+       <named-query name="XXPolicy.countById">
+               <query>select count(obj.id) from XXPolicy obj where obj.id = 
:policyId</query>
+       </named-query>
+
        <named-query name="XXPolicy.findByPolicyName">
                <query>select obj from XXPolicy obj where obj.name = :polName 
order by obj.id</query>
        </named-query>

Reply via email to