You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2022/08/16 23:47:22 UTC

[ranger] 02/03: RANGER-3854: Persist db updates immediately using Transaction Management in J10056

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

pradeep pushed a commit to branch ranger-2.4
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit 062902f24ee9cfe439b19aa0c88236c6e6010b07
Author: Abhishek Kumar <ab...@gmail.com>
AuthorDate: Wed Aug 10 12:56:39 2022 -0700

    RANGER-3854: Persist db updates immediately using Transaction Management in J10056
    
    Signed-off-by: pradeep <pr...@apache.org>
---
 .../PatchForExternalUserStatusUpdate_J10056.java   | 29 +++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/patch/PatchForExternalUserStatusUpdate_J10056.java b/security-admin/src/main/java/org/apache/ranger/patch/PatchForExternalUserStatusUpdate_J10056.java
index f1ed0978c..f4a122b38 100644
--- a/security-admin/src/main/java/org/apache/ranger/patch/PatchForExternalUserStatusUpdate_J10056.java
+++ b/security-admin/src/main/java/org/apache/ranger/patch/PatchForExternalUserStatusUpdate_J10056.java
@@ -28,7 +28,13 @@ import org.apache.ranger.util.CLIUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
 
 @Component
 public class PatchForExternalUserStatusUpdate_J10056 extends BaseLoader {
@@ -36,7 +42,11 @@ public class PatchForExternalUserStatusUpdate_J10056 extends BaseLoader {
 	private static final Logger logger = LoggerFactory.getLogger(PatchForExternalUserStatusUpdate_J10056.class);
 
 	@Autowired
-	private RangerDaoManager rngrDaoMgr;
+	private RangerDaoManager daoManager;
+
+	@Autowired
+	@Qualifier(value = "transactionManager")
+	PlatformTransactionManager txManager;
 
 	public static void main(String[] args) {
 		try {
@@ -70,14 +80,27 @@ public class PatchForExternalUserStatusUpdate_J10056 extends BaseLoader {
 	}
 
 	private void updateExternalUserStatus() {
-		XXPortalUserDao dao = this.rngrDaoMgr.getXXPortalUser();
+		XXPortalUserDao dao = this.daoManager.getXXPortalUser();
 		List<XXPortalUser> xXPortalUsers = dao.findByUserSourceAndStatus(RangerCommonEnums.USER_EXTERNAL,RangerCommonEnums.ACT_STATUS_DISABLED);
 
 		if(CollectionUtils.isNotEmpty(xXPortalUsers)) {
 			for (XXPortalUser xxPortalUser : xXPortalUsers) {
 				if (xxPortalUser != null) {
 					xxPortalUser.setStatus(RangerCommonEnums.ACT_STATUS_ACTIVE);
-					dao.update(xxPortalUser, true);
+					TransactionTemplate txTemplate = new TransactionTemplate(txManager);
+					txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
+					try {
+						txTemplate.execute(new TransactionCallback<Object>() {
+							@Override
+							public Object doInTransaction(TransactionStatus status) {
+								dao.update(xxPortalUser, true);
+								return null;
+							}
+						});
+					} catch (Throwable ex) {
+						logger.error("updateExternalUserStatus(): Failed to update DB for user: " + xxPortalUser.getLoginId() + " ", ex);
+						throw new RuntimeException(ex);
+					}
 				}
 			}
 		}