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