You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by me...@apache.org on 2019/10/30 07:32:17 UTC

[ranger] 02/02: RANGER-2595: Improve policy delete performance using batch delete

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 b348291eaeeefc3723bb5507d3770b463544c24a
Author: Andrew <an...@outlook.com>
AuthorDate: Sat Sep 28 23:10:46 2019 -0700

    RANGER-2595: Improve policy delete performance using batch delete
    
    Signed-off-by: Mehul Parikh <me...@apache.org>
---
 .../org/apache/ranger/biz/PolicyRefUpdater.java    | 49 ++++------------------
 .../apache/ranger/db/XXPolicyRefAccessTypeDao.java |  8 ++++
 .../apache/ranger/db/XXPolicyRefConditionDao.java  |  8 ++++
 .../ranger/db/XXPolicyRefDataMaskTypeDao.java      |  9 ++++
 .../org/apache/ranger/db/XXPolicyRefGroupDao.java  |  8 ++++
 .../apache/ranger/db/XXPolicyRefResourceDao.java   |  9 ++++
 .../org/apache/ranger/db/XXPolicyRefRoleDao.java   |  8 ++++
 .../org/apache/ranger/db/XXPolicyRefUserDao.java   |  8 ++++
 .../main/resources/META-INF/jpa_named_queries.xml  | 28 +++++++++++++
 9 files changed, 93 insertions(+), 42 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java b/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java
index 055cd38..7b2356b 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java
@@ -26,13 +26,6 @@ import java.util.Set;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.db.RangerDaoManager;
-import org.apache.ranger.db.XXPolicyRefAccessTypeDao;
-import org.apache.ranger.db.XXPolicyRefConditionDao;
-import org.apache.ranger.db.XXPolicyRefDataMaskTypeDao;
-import org.apache.ranger.db.XXPolicyRefGroupDao;
-import org.apache.ranger.db.XXPolicyRefResourceDao;
-import org.apache.ranger.db.XXPolicyRefRoleDao;
-import org.apache.ranger.db.XXPolicyRefUserDao;
 import org.apache.ranger.entity.XXAccessTypeDef;
 import org.apache.ranger.entity.XXDataMaskTypeDef;
 import org.apache.ranger.entity.XXGroup;
@@ -252,41 +245,13 @@ public class PolicyRefUpdater {
 			return false;
 		}
 
-		XXPolicyRefResourceDao     xPolResDao      = daoMgr.getXXPolicyRefResource();
-		XXPolicyRefRoleDao         xPolRoleDao     = daoMgr.getXXPolicyRefRole();
-		XXPolicyRefGroupDao        xPolGroupDao    = daoMgr.getXXPolicyRefGroup();
-		XXPolicyRefUserDao         xPolUserDao     = daoMgr.getXXPolicyRefUser();
-		XXPolicyRefAccessTypeDao   xPolAccessDao   = daoMgr.getXXPolicyRefAccessType();
-		XXPolicyRefConditionDao    xPolCondDao     = daoMgr.getXXPolicyRefCondition();
-		XXPolicyRefDataMaskTypeDao xPolDataMaskDao = daoMgr.getXXPolicyRefDataMaskType();
-
-		for (XXPolicyRefResource resource : xPolResDao.findByPolicyId(policyId)) {
-			xPolResDao.remove(resource);
-		}
-
-		for(XXPolicyRefRole role : xPolRoleDao.findByPolicyId(policyId)) {
-			xPolRoleDao.remove(role);
-		}
-
-		for(XXPolicyRefGroup group : xPolGroupDao.findByPolicyId(policyId)) {
-			xPolGroupDao.remove(group);
-		}
-
-		for(XXPolicyRefUser user : xPolUserDao.findByPolicyId(policyId)) {
-			xPolUserDao.remove(user);
-		}
-
-		for(XXPolicyRefAccessType access : xPolAccessDao.findByPolicyId(policyId)) {
-			xPolAccessDao.remove(access);
-		}
-
-		for(XXPolicyRefCondition condVal : xPolCondDao.findByPolicyId(policyId)) {
-			xPolCondDao.remove(condVal);
-		}
-
-		for(XXPolicyRefDataMaskType dataMask : xPolDataMaskDao.findByPolicyId(policyId)) {
-			xPolDataMaskDao.remove(dataMask);
-		}
+		daoMgr.getXXPolicyRefResource().deleteByPolicyId(policyId);
+		daoMgr.getXXPolicyRefRole().deleteByPolicyId(policyId);
+		daoMgr.getXXPolicyRefGroup().deleteByPolicyId(policyId);
+		daoMgr.getXXPolicyRefUser().deleteByPolicyId(policyId);
+		daoMgr.getXXPolicyRefAccessType().deleteByPolicyId(policyId);
+		daoMgr.getXXPolicyRefCondition().deleteByPolicyId(policyId);
+		daoMgr.getXXPolicyRefDataMaskType().deleteByPolicyId(policyId);
 
 		return true;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefAccessTypeDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefAccessTypeDao.java
index 1ef01bb..b9a60cb 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefAccessTypeDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefAccessTypeDao.java
@@ -97,4 +97,12 @@ public class XXPolicyRefAccessTypeDao extends BaseDao<XXPolicyRefAccessType> {
         return ret;
     }
 
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefAccessType.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefConditionDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefConditionDao.java
index 2c04ab4..e14bc14 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefConditionDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefConditionDao.java
@@ -108,4 +108,12 @@ public class XXPolicyRefConditionDao extends BaseDao<XXPolicyRefCondition>  {
         return ret;
     }
 
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefCondition.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefDataMaskTypeDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefDataMaskTypeDao.java
index 258e3b0..7e7b8d4 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefDataMaskTypeDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefDataMaskTypeDao.java
@@ -83,4 +83,13 @@ public class XXPolicyRefDataMaskTypeDao extends BaseDao<XXPolicyRefDataMaskType>
         }
         return ret;
     }
+
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefDataMaskType.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefGroupDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefGroupDao.java
index 08829d4..5f9d9ed 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefGroupDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefGroupDao.java
@@ -96,4 +96,12 @@ public class XXPolicyRefGroupDao extends BaseDao<XXPolicyRefGroup>{
         return ret;
     }
 
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefGroup.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefResourceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefResourceDao.java
index e259ee8..0ea7de9 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefResourceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefResourceDao.java
@@ -62,6 +62,15 @@ public class XXPolicyRefResourceDao extends BaseDao<XXPolicyRefResource>{
 		}
 	}
 
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefResource.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
+
 	 @SuppressWarnings("unchecked")
 	    public List<RangerPolicyRetriever.PolicyTextNameMap> findUpdatedResourceNamesByPolicy(Long policyId) {
 	        List<RangerPolicyRetriever.PolicyTextNameMap> ret = new ArrayList<>();
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefRoleDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefRoleDao.java
index dbcacb7..3ae7e7a 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefRoleDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefRoleDao.java
@@ -108,5 +108,13 @@ public class XXPolicyRefRoleDao extends BaseDao<XXPolicyRefRole>{
 		return ret;
 	}
 
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefRole.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
 }
 
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefUserDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefUserDao.java
index f7b6131..518139a 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefUserDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyRefUserDao.java
@@ -108,4 +108,12 @@ public class XXPolicyRefUserDao extends BaseDao<XXPolicyRefUser>{
         return ret;
     }
 
+	public void deleteByPolicyId(Long policyId) {
+		if(policyId == null) {
+			return;
+		}
+		getEntityManager()
+			.createNamedQuery("XXPolicyRefUser.deleteByPolicyId", tClass)
+			.setParameter("policyId", policyId).executeUpdate();
+	}
 }
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 bc8062c..b619b7a 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
@@ -592,6 +592,10 @@
 		<query>select obj from XXPolicyRefAccessType obj where obj.accessDefId = :accessDefId</query>
 	</named-query>
 
+	<named-query name="XXPolicyRefAccessType.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefAccessType obj WHERE obj.policyId = :policyId</query>
+	</named-query>
+
 	<!-- XXPolicyRefCondition -->
 	<named-query name="XXPolicyRefCondition.findByPolicyId">
 		<query>select obj from XXPolicyRefCondition obj where obj.policyId = :policyId </query>
@@ -601,6 +605,10 @@
 		<query>select obj from XXPolicyRefCondition obj where obj.conditionName = :conditionName</query>
 	</named-query>
 
+	<named-query name="XXPolicyRefCondition.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefCondition obj WHERE obj.policyId = :policyId </query>
+	</named-query>
+
 	<!-- XXPolicyRefGroup -->
 	<named-query name="XXPolicyRefGroup.findByPolicyId">
 		<query>select obj from XXPolicyRefGroup obj where obj.policyId = :policyId </query>
@@ -615,6 +623,10 @@
 		<query>select obj from XXPolicyRefGroup obj where obj.groupId = :groupId and obj.policyId = :policyId </query>
 	</named-query>
 
+	<named-query name="XXPolicyRefGroup.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefGroup obj WHERE obj.policyId = :policyId</query>
+	</named-query>
+
 	<named-query name="XXPolicyRefCondition.findByConditionDefIdAndPolicyId">
 		<query>select obj from XXPolicyRefCondition obj where obj.conditionDefId = :conditionDefId and obj.policyId = :policyId </query>
 	</named-query>
@@ -766,6 +778,10 @@
 		<query>select obj from XXPolicyRefDataMaskType obj where obj.dataMaskTypeName = :dataMaskTypeName</query>
 	</named-query>
 
+	<named-query name="XXPolicyRefDataMaskType.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefDataMaskType obj WHERE obj.policyId = :policyId </query>
+	</named-query>
+
 	<!-- XXPolicyRefResource -->
 	<named-query name="XXPolicyRefResource.findByPolicyId">
 		<query>select obj from XXPolicyRefResource obj where obj.policyId = :policyId </query>
@@ -775,6 +791,10 @@
 		<query>select obj from XXPolicyRefResource obj where obj.resourceDefId = :resourceDefId</query>
 	</named-query>
 
+	<named-query name="XXPolicyRefResource.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefResource obj WHERE obj.policyId = :policyId </query>
+	</named-query>
+
 	<!-- XXPolicyRefUser -->
 	<named-query name="XXPolicyRefUser.findByPolicyId">
 		<query>select obj from XXPolicyRefUser obj where obj.policyId = :policyId </query>
@@ -788,6 +808,10 @@
 		<query>select obj from XXPolicyRefUser obj where obj.userId = :userId</query>
 	</named-query>
 
+	<named-query name="XXPolicyRefUser.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefUser obj WHERE obj.policyId = :policyId</query>
+	</named-query>
+
 	<!-- XXPolicyItemCondition -->
 
 	<named-query name="XXPolicyItemCondition.findByPolicyId">
@@ -1587,6 +1611,10 @@
         <query>select count(obj.policyId) from XXPolicyRefRole obj where obj.roleName = :roleName </query>
     </named-query>
 
+	<named-query name="XXPolicyRefRole.deleteByPolicyId">
+		<query>DELETE FROM XXPolicyRefRole obj WHERE obj.policyId = :policyId </query>
+	</named-query>
+
 	<!-- XXTagChangeLog -->
 	<named-query name="XXTagChangeLog.findSinceVersion">
 		<query>