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); + } } } }