himanshug commented on a change in pull request #7716: AggregatorUtil should 
cache parsed expression to avoid memory problem (OOM/FGC) when Expression is 
used in metricsSpec
URL: https://github.com/apache/incubator-druid/pull/7716#discussion_r286190859
 
 

 ##########
 File path: 
processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java
 ##########
 @@ -196,7 +246,7 @@ static BaseFloatColumnValueSelector 
makeColumnValueSelectorWithFloatDefault(
     if (fieldName != null) {
       return metricFactory.makeColumnValueSelector(fieldName);
     } else {
-      final Expr expr = Parser.parse(fieldExpression, macroTable);
+      final Expr expr = parseIfAbsent(fieldExpression, macroTable);
 
 Review comment:
   would be better to not have explicit cache added in this class. Instead, if 
you change arguments of this(and other similar methods) to...
   
   ```
     static BaseFloatColumnValueSelector 
makeColumnValueSelectorWithFloatDefault(
         final ColumnSelectorFactory metricFactory,
         @Nullable final String fieldName,
         @Nullable final Expr fieldExpression,
         final float nullValue
     )
   ```
   
   and let caching happen in `SimpleXXAggregatorFactory` classes . Don't parse 
in the constructor of those classes because those objects could be created in 
many places where they wouldn't need parsed expression, so do the parsing 
lazily.

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

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

Reply via email to