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 <abhishekkumar100...@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 <prad...@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);
+                                       }
                                }
                        }
                }

Reply via email to