RANGER-4634: on service deletion, delete associated GDS objects as well
Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/GdsStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/GdsStore.java
index 63a6f91..afbce78 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/store/GdsStore.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/GdsStore.java
@@ -131,4 +131,6 @@
RangerDatasetInProject getDatasetInProject(Long datasetInProjectId) throws Exception;
PList<RangerDatasetInProject> searchDatasetInProjects(SearchFilter filter) throws Exception;
+
+ void deleteAllGdsObjectsForService(Long serviceId) throws Exception;
}
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
index d9c056a..701165f 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
@@ -1190,6 +1190,31 @@
return ret;
}
+ @Override
+ public void deleteAllGdsObjectsForService(Long serviceId) throws Exception {
+ LOG.debug("==> deleteAllGdsObjectsForService({})", serviceId);
+
+ List<XXGdsDataShare> dataShares = daoMgr.getXXGdsDataShare().findByServiceId(serviceId);
+
+ if (CollectionUtils.isNotEmpty(dataShares)) {
+ LOG.info("Deleting {} dataShares associated with service id={}", dataShares.size(), serviceId);
+
+ dataShares.forEach(dataShare -> {
+ try {
+ LOG.info("Deleting dataShare id={}, name={}", dataShare.getId(), dataShare.getName());
+
+ deleteDataShare(dataShare.getId(), true);
+ } catch (Exception excp) {
+ LOG.error("failed to delete dataShare id={}, name={}", dataShare.getId(), dataShare.getName(), excp);
+
+ throw excp;
+ }
+ });
+ }
+
+ LOG.debug("<== deleteAllGdsObjectsForService({})", serviceId);
+ }
+
public ServiceGdsInfo getGdsInfoIfUpdated(String serviceName, Long lastKnownVersion) throws Exception {
LOG.debug("==> GdsDBStore.getGdsInfoIfUpdated({}, {})", serviceName , lastKnownVersion);
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 49386d0..e7e0abb 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
@@ -54,6 +54,7 @@
import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
import org.apache.ranger.authorization.utils.StringUtil;
import org.apache.ranger.biz.AssetMgr;
+import org.apache.ranger.biz.GdsDBStore;
import org.apache.ranger.biz.PolicyRefUpdater;
import org.apache.ranger.biz.RangerPolicyAdmin;
import org.apache.ranger.biz.RangerBizUtil;
@@ -240,8 +241,11 @@
TagDBStore tagStore;
@Autowired
+ GdsDBStore gdsStore;
+
+ @Autowired
RangerTransactionSynchronizationAdapter rangerTransactionSynchronizationAdapter;
-
+
private RangerPolicyEngineOptions delegateAdminOptions;
private RangerPolicyEngineOptions policySearchAdminOptions;
private RangerPolicyEngineOptions defaultAdminOptions;
@@ -4643,7 +4647,10 @@
bizUtil.hasKMSPermissions("Service", xxServiceDef.getImplclassname());
bizUtil.blockAuditorRoleUser();
}
+
tagStore.deleteAllTagObjectsForService(service.getName());
+ gdsStore.deleteAllGdsObjectsForService(id);
+
deletedServiceName = service.getName();
svcStore.deleteService(id);