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

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


The following commit(s) were added to refs/heads/master by this push:
     new 1fa2d17  RANGER-2481: Create a tag service when a resource service is 
created and link it to resource service - Part 2
1fa2d17 is described below

commit 1fa2d1715a3915019abc3574d7fe0b96c9c02e0a
Author: Abhay Kulkarni <[email protected]>
AuthorDate: Wed Jul 10 17:31:50 2019 -0700

    RANGER-2481: Create a tag service when a resource service is created and 
link it to resource service - Part 2
---
 .../java/org/apache/ranger/rest/ServiceREST.java   | 74 ++++++++++++++++------
 .../ranger/service/RangerPluginActivityLogger.java |  3 +-
 .../ranger/service/RangerTransactionService.java   |  4 +-
 .../org/apache/ranger/rest/TestServiceREST.java    |  6 +-
 .../service/TestRangerTransactionService.java      |  2 +-
 5 files changed, 64 insertions(+), 25 deletions(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 171d73b..b6ac236 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -78,6 +78,7 @@ import org.apache.ranger.common.RangerSearchUtil;
 import org.apache.ranger.common.RangerValidatorFactory;
 import org.apache.ranger.common.ServiceUtil;
 import org.apache.ranger.common.UserSessionBase;
+import org.apache.ranger.common.db.RangerTransactionSynchronizationAdapter;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXPolicyExportAudit;
 import org.apache.ranger.entity.XXSecurityZone;
@@ -225,6 +226,9 @@ public class ServiceREST {
 
        @Autowired
        RangerTransactionService transactionService;
+
+       @Autowired
+       RangerTransactionSynchronizationAdapter 
rangerTransactionSynchronizationAdapter;
        
        private RangerPolicyEngineOptions delegateAdminOptions;
        private RangerPolicyEngineOptions policySearchAdminOptions;
@@ -3941,10 +3945,18 @@ public class ServiceREST {
                                        Runnable createAndLinkTagServiceTask = 
new Runnable() {
                                                @Override
                                                public void run() {
-                                                       
doCreateAndLinkTagService(context);
+                                                       Runnable realTask = new 
Runnable() {
+                                                               @Override
+                                                               public void 
run() {
+                                                                       
doCreateAndLinkTagService(context);
+                                                               }
+                                                       };
+                                                       
transactionService.scheduleToExecuteInOwnTransaction(realTask, 0L);
                                                }
                                        };
-                                       
transactionService.executeAfterTransactionComplete(createAndLinkTagServiceTask);
+
+                                       
rangerTransactionSynchronizationAdapter.executeOnTransactionCommit(createAndLinkTagServiceTask);
+
                                } else if (isAutoLinkTagService) {
                                        
resourceService.setTagService(tagServiceName);
                                }
@@ -3989,7 +4001,7 @@ public class ServiceREST {
                RangerService resourceService = null;
 
                try {
-                       resourceService = 
getServiceByName(context.resourceServiceName);
+                       resourceService = 
svcStore.getServiceByName(context.resourceServiceName);
                        LOG.info("Successfully retrieved resource-service:[" + 
resourceService.getName() + "]");
                } catch (Exception e) {
                        LOG.error("Resource-service:[" + 
context.resourceServiceName + "] cannot be retrieved");
@@ -4014,30 +4026,52 @@ public class ServiceREST {
                        }
 
                        if (context.isAutoLinkTagService) {
-                               if (LOG.isDebugEnabled()) {
-                                       LOG.debug("Linking resource service:[" 
+ resourceService.getName() + "] with tag service:[" + context.tagServiceName + 
"]");
-                               }
-                               try {
-                                       tagService = 
getServiceByName(context.tagServiceName);
-                                       LOG.info("Successfully retrieved 
tag-service:[" + tagService.getName() + "]");
+                               Runnable linkTagServiceTask = new Runnable() {
+                                       @Override
+                                       public void run() {
+                                               Runnable realTask = new 
Runnable() {
+                                                       @Override
+                                                       public void run() {
+                                                               
doLinkTagService(context);
+                                                       }
+                                               };
+                                               
transactionService.scheduleToExecuteInOwnTransaction(realTask, 0L);
+                                       }
+                               };
+                               
rangerTransactionSynchronizationAdapter.executeOnTransactionCompletion(linkTagServiceTask);
+                       }
+               }
 
-                                       if 
(!StringUtils.equals(tagService.getName(), resourceService.getTagService())) {
-                                               
resourceService.setTagService(tagService.getName());
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== doCreateAndLinkTagService(context=" + 
context + ")");
+               }
+       }
 
-                                               LOG.info("Linking 
resource-service[" + resourceService.getName() + "] with tag-service [" + 
tagService.getName() + "]");
+       private void doLinkTagService(final TagServiceOperationContext context) 
{
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> doLinkTagService(context=" + context + 
")");
+               }
+               try {
+                       RangerService resourceService = 
svcStore.getServiceByName(context.resourceServiceName);
+                       LOG.info("Successfully retrieved resource-service:[" + 
resourceService.getName() + "]");
 
-                                               service = 
svcStore.updateService(resourceService, null);
+                       RangerService tagService = 
svcStore.getServiceByName(context.tagServiceName);
+                       LOG.info("Successfully retrieved tag-service:[" + 
tagService.getName() + "]");
 
-                                               LOG.info("Updated 
resource-service:[" + service.getName() + "]");
-                                       }
-                               } catch (Exception e) {
-                                       LOG.error("Failed to link service[" + 
context.resourceServiceName + "] with tag-service [" + context.tagServiceName + 
"]");
-                               }
+                       if (!StringUtils.equals(tagService.getName(), 
resourceService.getTagService())) {
+                               
resourceService.setTagService(tagService.getName());
+
+                               LOG.info("Linking resource-service[" + 
resourceService.getName() + "] with tag-service [" + tagService.getName() + 
"]");
+
+                               RangerService service = 
svcStore.updateService(resourceService, null);
+
+                               LOG.info("Updated resource-service:[" + 
service.getName() + "]");
                        }
+               } catch (Exception e) {
+                       LOG.error("Failed to link service[" + 
context.resourceServiceName + "] with tag-service [" + context.tagServiceName + 
"]");
                }
-
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== doCreateAndLinkTagService(context=" + 
context + ")");
+                       LOG.debug("<== doLinkTagService(context=" + context + 
")");
                }
        }
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginActivityLogger.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginActivityLogger.java
index 0335e6d..702df4c 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginActivityLogger.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginActivityLogger.java
@@ -61,7 +61,8 @@ public class RangerPluginActivityLogger {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Using separate thread for committing work 
[pluginActivityAuditCommitInline:" + pluginActivityAuditCommitInline + "]");
             }
-            transactionService.executeAfterTransactionComplete(commitWork);
+            final long delayInMillis = 1000L;
+            transactionService.scheduleToExecuteInOwnTransaction(commitWork, 
delayInMillis);
         }
     }
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTransactionService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTransactionService.java
index c60773e..d8c15a5 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTransactionService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTransactionService.java
@@ -72,7 +72,7 @@ public class RangerTransactionService {
         }
     }
 
-    public void executeAfterTransactionComplete(final Runnable task) {
+    public void scheduleToExecuteInOwnTransaction(final Runnable task, final 
long delayInMillis) {
         try {
             scheduler.schedule(new Runnable() {
                 @Override
@@ -95,7 +95,7 @@ public class RangerTransactionService {
                         }
                     }
                 }
-            }, 1000L, MILLISECONDS);
+            }, delayInMillis, MILLISECONDS);
         } catch (Exception e) {
             LOG.error("Failed to schedule TransactionService transaction:", e);
             LOG.error("Ignroing...");
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
index 9b9aa83..536a7f3 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
@@ -52,6 +52,7 @@ import org.apache.ranger.common.RangerValidatorFactory;
 import org.apache.ranger.common.ServiceUtil;
 import org.apache.ranger.common.StringUtil;
 import org.apache.ranger.common.UserSessionBase;
+import org.apache.ranger.common.db.RangerTransactionSynchronizationAdapter;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.db.XXSecurityZoneDao;
 import org.apache.ranger.db.XXSecurityZoneRefServiceDao;
@@ -231,7 +232,10 @@ public class TestServiceREST {
        RangerPolicyEngine policyEngine;
 
        @Mock
-       RangerTransactionService transactionService;
+       RangerTransactionService rangerTransactionService;
+
+       @Mock
+       RangerTransactionSynchronizationAdapter 
rangerTransactionSynchronizationAdapter;
        
        @Rule
        public ExpectedException thrown = ExpectedException.none();
diff --git 
a/security-admin/src/test/java/org/apache/ranger/service/TestRangerTransactionService.java
 
b/security-admin/src/test/java/org/apache/ranger/service/TestRangerTransactionService.java
index 9ba9cf1..283544f 100644
--- 
a/security-admin/src/test/java/org/apache/ranger/service/TestRangerTransactionService.java
+++ 
b/security-admin/src/test/java/org/apache/ranger/service/TestRangerTransactionService.java
@@ -55,7 +55,7 @@ public class TestRangerTransactionService {
 
        @Test
        public void test3ExecuteAfterTransactionComplete() {
-               rangerTransactionService.executeAfterTransactionComplete(task);
+               
rangerTransactionService.scheduleToExecuteInOwnTransaction(task, 1000L);
 
        }
 }

Reply via email to