You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2023/10/06 05:57:10 UTC

[ranger] 01/02: RANGER-4440: when compression is enabled for x_security_zone.jsonData, store summary (not complete resource details) in trx log - #2

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 <ma...@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;
+    }
 }