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));
