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:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]