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 2024/09/04 00:47:41 UTC
(ranger) 07/07: RANGER-4889: updated RangerMemSizing to support option -k, to specify list of resource keys - #2
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 <ma...@apache.org>
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));