This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 5acbc654c830314ec527f333973f2463c770e1f1 Author: Madhan Neethiraj <mad...@apache.org> AuthorDate: Thu Oct 5 10:04:34 2023 -0700 RANGER-4440: when compression is enabled for x_security_zone.jsonData, store summary (not complete resource details) in trx log - #2 --- .../service/RangerSecurityZoneServiceService.java | 37 +++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) 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 index 439d9a6de..8acdd9813 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -42,6 +43,7 @@ import org.apache.ranger.entity.XXTrxLog; import org.apache.ranger.entity.XXUser; import org.apache.ranger.plugin.model.RangerPolicyDelta; import org.apache.ranger.plugin.model.RangerSecurityZone; +import org.apache.ranger.plugin.model.RangerSecurityZone.RangerSecurityZoneService; import org.apache.ranger.util.RangerEnumUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -306,8 +308,7 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB } } if("services".equalsIgnoreCase(fieldName)) { - Gson gson = new Gson(); - value = gson.toJson(vSecurityZone.getServices(), HashMap.class); + value = toTrxLog(vSecurityZone.getServices()); } if ("create".equalsIgnoreCase(action)) { xTrxLog.setNewValue(value); @@ -325,8 +326,7 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB String mFieldName = mField.getName(); if (fieldName.equalsIgnoreCase(mFieldName)) { if("services".equalsIgnoreCase(mFieldName)) { - Gson gson = new Gson(); - oldValue = gson.toJson(securityZoneDB.getServices(), HashMap.class); + oldValue = toTrxLog(securityZoneDB.getServices()); } else { oldValue = mField.get(securityZoneDB) + ""; @@ -357,4 +357,33 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB } return trxLogList; } + + private String toTrxLog(Map<String, RangerSecurityZoneService> services) { + String ret; + + if (services == null) { + services = Collections.emptyMap(); + } + + if (compressJsonData) { // when compression is enabled, summarize services info for trx log + Map<String, RangerSecurityZoneService> servicesSummary = new HashMap<>(services.size()); + + for (Map.Entry<String, RangerSecurityZoneService> entry : services.entrySet()) { + String serviceName = entry.getKey(); + RangerSecurityZoneService zoneService = entry.getValue(); + Integer resourceCount = (zoneService != null && zoneService.getResources() != null) ? zoneService.getResources().size() : 0; + RangerSecurityZoneService zoneServiceSummary = new RangerSecurityZoneService(); + + zoneServiceSummary.getResources().add(new HashMap<String, List<String>>() {{ put("resourceCount", Collections.singletonList(resourceCount.toString())); }}); + + servicesSummary.put(serviceName, zoneServiceSummary); + } + + ret = new Gson().toJson(servicesSummary, Map.class); + } else { + ret = new Gson().toJson(services, Map.class); + } + + return ret; + } }