Github user agresch commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2881#discussion_r226065179
  
    --- Diff: storm-client/src/jvm/org/apache/storm/utils/Utils.java ---
    @@ -121,11 +121,68 @@
         private static String memoizedLocalHostnameString = null;
         public static final Pattern TOPOLOGY_KEY_PATTERN = 
Pattern.compile("^[\\w \\t\\._-]+$", Pattern.UNICODE_CHARACTER_CLASS);
     
    +    public static final String NUMA_MEMORY_IN_MB = "MemoryInMB";
    +    public static final String NUMA_CORES = "Cores";
    +    public static final String NUMAS_PORTS = "Ports";
    +    public static final String NUMA_ID = "Id";
    +    public static final String NUMAS_BASE = "Numas";
    +
         static {
             localConf = readStormConfig();
             serializationDelegate = getSerializationDelegate(localConf);
         }
     
    +    /**
    +     * 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("The numa configuration 
key [" + key + "] is missing!");
    +                }
    +            }
    +            validatedNumaMap.put((String) numa.get(NUMA_ID), numa);
    +        }
    +        return validatedNumaMap;
    +    }
    +
    +    /**
    +     * getNumaIdForPort.
    +     * @param port port
    +     * @param stormConf stormConf
    +     * @return getNumaIdForPort
    +     * @throws KeyNotFoundException
    +     */
    +    public static String getNumaIdForPort(Number port, Map<String, Object> 
stormConf) {
    +        Map validatedNumaMap = null;
    +        try {
    +            validatedNumaMap = getValidatedNumaMap(stormConf);
    +        } catch (KeyNotFoundException e) {
    +            LOG.error("Exception while getting NUMA config", e);
    +            return null;
    --- End diff --
    
    This sounds like it should be a serious misconfig.  I would think we should 
throw an exception?


---

Reply via email to