davecromberge commented on code in PR #14373:
URL: https://github.com/apache/pinot/pull/14373#discussion_r1869402277


##########
pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/mergerollup/MergeRollupTaskUtils.java:
##########
@@ -45,12 +47,25 @@ private MergeRollupTaskUtils() {
    */
   public static Map<String, Map<String, String>> 
getLevelToConfigMap(Map<String, String> taskConfig) {
     Map<String, Map<String, String>> levelToConfigMap = new TreeMap<>();
+
+    // Regex to match aggregation function parameter keys
+    Pattern pattern = 
Pattern.compile("(\\w+)\\.aggregationFunctionParameters\\.(\\w+)\\.(\\w+)");
+
     for (Map.Entry<String, String> entry : taskConfig.entrySet()) {
       String key = entry.getKey();
       for (String configKey : VALID_CONFIG_KEYS) {
         if (key.endsWith(configKey)) {
           String level = key.substring(0, key.length() - configKey.length() - 
1);
           levelToConfigMap.computeIfAbsent(level, k -> new 
TreeMap<>()).put(configKey, entry.getValue());
+        } else {
+          Matcher matcher = pattern.matcher(key);

Review Comment:
   @swaminathanmanish this is unfortunately not possible.  The "level" variable 
is extracted by using the substring of the key from the beginning of the string 
until the position of the config key itself.  
   Because the config key includes a metric name, the key parameter does not 
solely consist of the term in the `VALID_CONFIG_KEYS` set.
   
   For example, using the following task configuration:
   ```
   "hourly.aggregationFunctionParameters.metricColumnA.nominalEntries": "16384"
   "hourly.aggregationFunctionParameters.metricColumnB.nominalEntries": "8192"
   "daily.aggregationFunctionParameters.metricColumnA.nominalEntries": "8192"
   "daily.aggregationFunctionParameters.metricColumnB.nominalEntries": "4096"
   ```
   
   Correctly produces the following `levelToConfigMap` of type `Map<String, 
Map<String, String>>`:
   ```
   hourly ->
     aggregationFunctionParameters.metricColumnA.nominalEntries -> 16384
     aggregationFunctionParameters.metricColumnB.nominalEntries -> 8192
     
   daily -> 
     aggregationFunctionParameters.metricColumnA.nominalEntries -> 8192
     aggregationFunctionParameters.metricColumnB.nominalEntries -> 4096
   ```
   
   If `nominalEntries` was added to the `VALID_CONFIG_KEYS` parsing path, we 
would get the following `levelToConfigMap`:
   ```
   hourly.aggregationFunctionParameters.metricColumnA ->
     nominalEntries -> 16384
   hourly.aggregationFunctionParameters.metricColumnB ->
     nominalEntries -> 8192
   daily.aggregationFunctionParameters.metricColumnA ->
     nominalEntries -> 8192
   daily.aggregationFunctionParameters.metricColumnB ->
     nominalEntries -> 4096
   ```
   This is because the level would be extracted incorrectly to include the 
prefix - which excludes the `VALID_CONFIG_KEY`.  I can't think of an 
alternative to the above, which preserves the existing structure.  Perhaps this 
is another "abuse" of using Maps but IMO it seems the most compatible with the 
existing design.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to