This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch ranger-2.6
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit 6aa016a7b7ff11ecf7e5a461696413d2a4465f37
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Fri Aug 23 14:09:06 2024 -0700

    RANGER-4889: updated RangerMemSizing to support option -k, to specify list 
of resource keys - #2
    
    (cherry picked from commit f1ba91b113f51e7bb05c0d9ddbd2ef6ea1217467)
---
 .../apache/ranger/sizing/PerfRequestGenerator.java | 24 +++++++++++++++++-----
 .../org/apache/ranger/sizing/RangerMemSizing.java  | 12 ++++++++++-
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git 
a/ranger-tools/src/main/java/org/apache/ranger/sizing/PerfRequestGenerator.java 
b/ranger-tools/src/main/java/org/apache/ranger/sizing/PerfRequestGenerator.java
index a33299312..4035f14d8 100644
--- 
a/ranger-tools/src/main/java/org/apache/ranger/sizing/PerfRequestGenerator.java
+++ 
b/ranger-tools/src/main/java/org/apache/ranger/sizing/PerfRequestGenerator.java
@@ -39,7 +39,10 @@ import java.util.HashSet;
 import java.util.Set;
 
 public class PerfRequestGenerator {
-    public PerfRequestGenerator() {
+    private final Set<String> resourceKeys;
+
+    public PerfRequestGenerator(Set<String> resourceKeys) {
+        this.resourceKeys = resourceKeys != null ? resourceKeys : 
Collections.emptySet();
     }
 
     public Collection<RangerAccessRequest> generate(ServicePolicies policies, 
ServiceTags tags) {
@@ -95,7 +98,11 @@ public class PerfRequestGenerator {
         Iterator<String> iterGroup       = groups.iterator();
 
         for (Map<String, Object> resource : resources) {
-            ret.add(new RangerAccessRequestImpl(new 
RangerAccessResourceImpl(resource), iterAccessTypes.next(), iterUser.next(), 
Collections.singleton(iterGroup.next()), null));
+            String      accessType = iterAccessTypes.next();
+            String      user       = iterUser.next();
+            Set<String> userGroups = Collections.singleton(iterGroup.next());
+
+            ret.add(new RangerAccessRequestImpl(new 
RangerAccessResourceImpl(resource), accessType, user, userGroups, null));
 
             if (!iterAccessTypes.hasNext()) {
                 iterAccessTypes = accessTypes.iterator();
@@ -118,7 +125,12 @@ public class PerfRequestGenerator {
             int resourceCount = 1;
 
             for (Map.Entry<String, RangerPolicyResource> entry : 
policyResource.entrySet()) {
-                resourceCount *= entry.getValue().getValues().size();
+                String       name   = entry.getKey();
+                List<String> values = entry.getValue().getValues();
+
+                if (!values.isEmpty() && (resourceKeys.isEmpty() || 
resourceKeys.contains(name))) {
+                    resourceCount *= values.size();
+                }
             }
 
             List<Map<String, Object>> toAdd = new ArrayList<>(resourceCount);
@@ -131,8 +143,10 @@ public class PerfRequestGenerator {
                 String       name   = entry.getKey();
                 List<String> values = entry.getValue().getValues();
 
-                for (int idxResource = 0; idxResource < resourceCount; 
idxResource++) {
-                    toAdd.get(idxResource).put(name, values.get(idxResource % 
values.size()));
+                if (!values.isEmpty() && (resourceKeys.isEmpty() || 
resourceKeys.contains(name))) {
+                    for (int idxResource = 0; idxResource < resourceCount; 
idxResource++) {
+                        toAdd.get(idxResource).put(name, 
values.get(idxResource % values.size()));
+                    }
                 }
             }
 
diff --git 
a/ranger-tools/src/main/java/org/apache/ranger/sizing/RangerMemSizing.java 
b/ranger-tools/src/main/java/org/apache/ranger/sizing/RangerMemSizing.java
index 7dbcbb67e..0a47151a9 100644
--- a/ranger-tools/src/main/java/org/apache/ranger/sizing/RangerMemSizing.java
+++ b/ranger-tools/src/main/java/org/apache/ranger/sizing/RangerMemSizing.java
@@ -23,9 +23,11 @@ import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -78,6 +80,7 @@ public class RangerMemSizing {
   private final String      rolesFile;
   private final String      userStoreFile;
   private final String      genRequestsFile;
+  private final Set<String> genResourceKeys;
   private final String      evalRequestsFile;
   private final int         evalClientsCount;
   private final boolean     deDup;
@@ -93,6 +96,7 @@ public class RangerMemSizing {
     this.rolesFile        = cmdLine.getOptionValue('r');
     this.userStoreFile    = cmdLine.getOptionValue('u');
     this.genRequestsFile  = cmdLine.getOptionValue('q');
+    this.genResourceKeys  = csvToSet(cmdLine.getOptionValue('k'));
     this.evalRequestsFile = cmdLine.getOptionValue('e');
     this.evalClientsCount = cmdLine.hasOption('c') ? 
Integer.parseInt(cmdLine.getOptionValue('c')) : 1;
     this.deDup            = Boolean.parseBoolean(cmdLine.getOptionValue("d", 
"true"));
@@ -382,7 +386,7 @@ public class RangerMemSizing {
 
     PerfMemTimeTracker tracker = new PerfMemTimeTracker("generateRequests");
 
-    Collection<RangerAccessRequest> requests = new 
PerfRequestGenerator().generate(policies, tags);
+    Collection<RangerAccessRequest> requests = new 
PerfRequestGenerator(genResourceKeys).generate(policies, tags);
 
     log("generateRequestsFile(): saving " + requests.size() + " requests..");
 
@@ -515,6 +519,7 @@ public class RangerMemSizing {
     Option gdsInfo      = new Option("g", "gdsInfo", true, "gdsInfo file");
     Option optimizeMode = new Option("o", "optMode", true, "optimization mode: 
space|retrieval");
     Option reuseResourceMatchers = new Option("m", "reuseResourceMatchers", 
true, "reuse resource matchers: true|false");
+    Option genResourceKeys       = new Option("k", "genResourceKeys", true, 
"list of resourceKeys (comma separated) to generate requests for");
 
     Options options = new Options();
 
@@ -530,6 +535,7 @@ public class RangerMemSizing {
     options.addOption(deDup);
     options.addOption(optimizeMode);
     options.addOption(reuseResourceMatchers);
+    options.addOption(genResourceKeys);
 
     try {
       CommandLine cmdLine = new DefaultParser().parse(options, args);
@@ -654,6 +660,10 @@ public class RangerMemSizing {
     return "users=" + userCount + ", groups=" + groupCount + ", 
userGroupMappings=" + userGroupCount;
   }
 
+  private Set<String> csvToSet(String str) {
+    return StringUtils.isBlank(str) ? Collections.emptySet() : new 
HashSet<>(Arrays.asList(StringUtils.split(str, ',')));
+  }
+
   private void initMapper(ObjectMapper mapper) {
     SimpleModule serDeModule = new SimpleModule("RangerMemSizing", new 
Version(1, 0, 0, null, null, null));
 

Reply via email to