RANGER-4697: increment GDS version of services when a security zone is updated
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
old mode 100644
new mode 100755
index 0dad263..976fa49
--- 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
@@ -137,5 +137,5 @@
void deleteAllGdsObjectsForSecurityZone(Long zoneId) throws Exception;
- void deleteAllGdsObjectsForServicesInSecurityZone(Collection<String> serviceNames, Long zoneId) throws Exception;
+ void onSecurityZoneUpdate(Long zoneId, Collection<String> updatedServices, Collection<String> removedServices) 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 4fa9c48..a1a2f99 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
@@ -1230,19 +1230,37 @@
}
@Override
- public void deleteAllGdsObjectsForServicesInSecurityZone(Collection<String> serviceNames, Long zoneId) {
- LOG.debug("==> deleteAllGdsObjectsForServicesInSecurityZone({}, {})", serviceNames, zoneId);
+ public void onSecurityZoneUpdate(Long zoneId, Collection<String> updatedServices, Collection<String> removedServices) {
+ LOG.debug("==> onSecurityZoneUpdate({}, {}, {})", zoneId, updatedServices, removedServices);
- if (zoneId != null && CollectionUtils.isNotEmpty(serviceNames)) {
- XXServiceDao serviceDao = daoMgr.getXXService();
- XXGdsDataShareDao dataShareDao = daoMgr.getXXGdsDataShare();
+ XXServiceDao serviceDao = daoMgr.getXXService();
+ XXGdsDataShareDao dataShareDao = daoMgr.getXXGdsDataShare();
- for (String serviceName : serviceNames) {
+ if (zoneId != null && CollectionUtils.isNotEmpty(updatedServices)) {
+ for (String serviceName : updatedServices) {
Long serviceId = serviceDao.findIdByName(serviceName);
if (serviceId == null) {
- LOG.warn("deleteAllGdsObjectsForServicesInSecurityZone(): invalid service name={}. Ignored", serviceName);
+ LOG.warn("onSecurityZoneUpdate(): updatedServices invalid service name={}. Ignored", serviceName);
+ continue;
+ }
+ List<XXGdsDataShare> dataShares = dataShareDao.findByServiceIdAndZoneId(serviceId, zoneId);
+
+ if (CollectionUtils.isEmpty(dataShares)) {
+ continue;
+ }
+
+ updateGdsVersionForService(serviceId);
+ }
+ }
+
+ if (zoneId != null && CollectionUtils.isNotEmpty(removedServices)) {
+ for (String serviceName : removedServices) {
+ Long serviceId = serviceDao.findIdByName(serviceName);
+
+ if (serviceId == null) {
+ LOG.warn("onSecurityZoneUpdate(): removedServices invalid service name={}. Ignored", serviceName);
continue;
}
@@ -1262,7 +1280,7 @@
}
}
- LOG.debug("<== deleteAllGdsObjectsForServicesInSecurityZone({}, {})", serviceNames, zoneId);
+ LOG.debug("<== onSecurityZoneUpdate({}, {}, {})", zoneId, updatedServices, removedServices);
}
public ServiceGdsInfo getGdsInfoIfUpdated(String serviceName, Long lastKnownVersion) throws Exception {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
old mode 100644
new mode 100755
index 25567c7..a6cb2ae
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
@@ -231,7 +231,7 @@
serviceDBStore.deleteZonePolicies(deletedTagServiceNames, ret.getId());
- gdsStore.deleteAllGdsObjectsForServicesInSecurityZone(deletedServiceNames, ret.getId());
+ gdsStore.onSecurityZoneUpdate(ret.getId(), updatedServiceNames, deletedServiceNames);
oldServiceNames.addAll(updatedServiceNames);
updateServiceInfos(oldServiceNames);