Github user Ethanlm commented on a diff in the pull request:
https://github.com/apache/storm/pull/2881#discussion_r228298658
--- Diff: storm-client/src/jvm/org/apache/storm/utils/Utils.java ---
@@ -119,15 +120,81 @@
// tests by subclassing.
private static Utils _instance = new Utils();
private static String memoizedLocalHostnameString = null;
- public static final Pattern TOPOLOGY_KEY_PATTERN =
Pattern.compile("^[\\w \\t\\._-]+$", Pattern.UNICODE_CHARACTER_CLASS);
+ public static final Pattern TOPOLOGY_KEY_PATTERN =
+ Pattern.compile("^[\\w \\t\\._-]+$",
Pattern.UNICODE_CHARACTER_CLASS);
+
+ public static final String NUMA_MEMORY_IN_MB = "memory.mb";
+ public static final String NUMA_CORES = "cores";
+ public static final String NUMAS_PORTS = "ports";
+ public static final String NUMA_ID = "node_id";
+ public static final String NUMAS_BASE = "numas";
static {
localConf = readStormConfig();
serializationDelegate = getSerializationDelegate(localConf);
}
/**
- * Provide an instance of this class for delegates to use. To mock
out delegated methods, provide an instance of a subclass that
+ * Validate supervisor numa configuration.
+ * @param stormConf stormConf
+ * @return getValidatedNumaMap
+ * @throws KeyNotFoundException
+ */
+ public static Map<String, Object> getValidatedNumaMap(Map<String,
Object> stormConf) throws KeyNotFoundException {
+ Map<String, Object> validatedNumaMap = new HashMap();
+ Map<String, Object> supervisorNumaMap =
+ (Map<String, Object>)
stormConf.get(Config.SUPERVISOR_NUMA_META);
+ if (supervisorNumaMap == null) {
+ return validatedNumaMap;
+ }
+ if (!supervisorNumaMap.containsKey(NUMAS_BASE)) {
+ throw new KeyNotFoundException(
+ "The numa configurations [" + NUMAS_BASE + "] is
missing!"
+ );
+ }
+ List<Map> numaEntries = (List<Map>)
supervisorNumaMap.get(NUMAS_BASE);
+ if (numaEntries == null) return validatedNumaMap;
+ for (Map numa : numaEntries) {
+ for (String key : new String[]{NUMA_ID, NUMA_CORES,
NUMA_MEMORY_IN_MB, NUMAS_PORTS}) {
+ if (!numa.containsKey(key)) {
+ throw new KeyNotFoundException(
--- End diff --
Same here. I think `IllegalArgumentException` is better
---