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

Reply via email to