RANGER-4267: moved GDS service creation to init, instead of at resource services creation
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/EmbeddedServiceDefsUtil.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/EmbeddedServiceDefsUtil.java
index 75be1e7..92ce183 100755
--- a/agents-common/src/main/java/org/apache/ranger/plugin/store/EmbeddedServiceDefsUtil.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/EmbeddedServiceDefsUtil.java
@@ -27,7 +27,9 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
+import org.apache.ranger.plugin.model.RangerService;
import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.apache.ranger.plugin.policyengine.gds.GdsPolicyEngine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -180,6 +182,8 @@
// Ensure that tag service def is updated with access types of all service defs
store.updateTagServiceDefForAccessTypes();
+
+ getOrCreateService(store, EMBEDDED_SERVICEDEF_GDS_NAME, GdsPolicyEngine.GDS_SERVICE_NAME);
} catch(Throwable excp) {
LOG.error("EmbeddedServiceDefsUtil.init(): failed", excp);
}
@@ -377,4 +381,38 @@
}
return supportedServiceDef;
}
+
+ private RangerService getOrCreateService(ServiceStore store, String serviceType, String serviceName) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("==> EmbeddedServiceDefsUtil.getOrCreateService(" + serviceType + ", " + serviceName + ")");
+ }
+
+ RangerService ret = null;
+
+ try {
+ ret = store.getServiceByName(serviceName);
+
+ if(ret == null) {
+ LOG.info("Creating service " + serviceName + " of type " + serviceType);
+
+ ret = new RangerService();
+
+ ret.setName(serviceName);
+ ret.setDisplayName(serviceName);
+ ret.setType(serviceType);
+
+ ret = store.createService(ret);
+
+ LOG.info("Created service " + serviceName + ". ID=" + (ret != null ? ret.getId() : null));
+ }
+ } catch(Exception excp) {
+ LOG.error("EmbeddedServiceDefsUtil.getOrCreateService(): failed to load/create service " + serviceName, excp);
+ }
+
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("<== EmbeddedServiceDefsUtil.getOrCreateService(" + serviceType + ", " + serviceName + "): " + ret);
+ }
+
+ return ret;
+ }
}
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 a14c7a9..49386d0 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
@@ -4329,17 +4329,7 @@
}
};
- Runnable createGdsServiceTask = new Runnable() {
- @Override
- public void run() {
- final LinkedServiceCreator creator = new LinkedServiceCreator(resourceService.getName(), EMBEDDED_SERVICEDEF_GDS_NAME, ServiceDBStore.GDS_SERVICE_NAME, true, false);
-
- creator.doCreateAndLinkService();
- }
- };
-
rangerTransactionSynchronizationAdapter.executeOnTransactionCommit(createAndLinkTagServiceTask);
- rangerTransactionSynchronizationAdapter.executeOnTransactionCommit(createGdsServiceTask);
if (LOG.isDebugEnabled()) {
LOG.debug("<== createOrGetLinkedServices(resourceService=" + resourceService.getName() + ")");
@@ -4363,14 +4353,6 @@
this.isAutoLink = config.getBoolean("ranger." + linkedServiceType + "service.auto.link", true);
}
- LinkedServiceCreator(@Nonnull String resourceServiceName, @Nonnull String linkedServiceType, String linkedServiceName, boolean autoCreate, boolean autoLink) {
- this.resourceServiceName = resourceServiceName;
- this.linkedServiceType = linkedServiceType;
- this.linkedServiceName = linkedServiceName;
- this.isAutoCreate = autoCreate;
- this.isAutoLink = autoLink;
- }
-
void doCreateAndLinkService() {
if (LOG.isDebugEnabled()) {
LOG.debug("==> doCreateAndLinkService()");