You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The problem happened on a very wide index pattern, where most likely some nodes are executing an MV_EXPAN on an attribute that does not exist on the local shards.
The local planner is running ReplaceMissingFieldWithNull optimization and probably replacing the target of MV_EXPAND with a Literal, but MV_EXPAND defines it as NamedExpression.
Happens with the following queries:
FROM logs*
| MV_EXPAND tags
| sort tags
| LIMIT 1
FROM logs*
| MV_EXPAND tags
| WHERE tags == \"auditd-log\"
| LIMIT 1
For this second query, in my specific case it fails with some specific limits (eg. LIMIT 10) but not with higher limits (eg. LIMIT 1000)
java.lang.ClassCastException: class org.elasticsearch.xpack.esql.core.expression.Literal cannot be cast to class org.elasticsearch.xpack.esql.core.expression.NamedExpression (org.elasticsearch.xpack.esql.core.expression.Literal and org.elasticsearch.xpack.esql.core.expression.NamedExpression are in unnamed module of loader java.net.FactoryURLClassLoader @3ebc6d8b)
at org.elasticsearch.xpack.esql.core.tree.NodeInfo$4.innerTransform(NodeInfo.java:146)
at org.elasticsearch.xpack.esql.core.tree.NodeInfo.transform(NodeInfo.java:60)
at org.elasticsearch.xpack.esql.core.tree.Node.transformNodeProps(Node.java:260)
at org.elasticsearch.xpack.esql.core.tree.Node.transformPropertiesOnly(Node.java:240)
at org.elasticsearch.xpack.esql.core.plan.QueryPlan.transformExpressionsOnlyUp(QueryPlan.java:91)
at org.elasticsearch.xpack.esql.optimizer.LocalLogicalPlanOptimizer$ReplaceMissingFieldWithNull.missingToNull(LocalLogicalPlanOptimizer.java:168)
at org.elasticsearch.xpack.esql.optimizer.LocalLogicalPlanOptimizer$ReplaceMissingFieldWithNull.lambda$apply$0(LocalLogicalPlanOptimizer.java:123)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:192)
at org.elasticsearch.xpack.esql.core.tree.Node.lambda$transformUp$10(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.transformChildren(Node.java:211)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.lambda$transformUp$10(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.transformChildren(Node.java:211)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.lambda$transformUp$10(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.transformChildren(Node.java:211)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:190)
at org.elasticsearch.xpack.esql.optimizer.LocalLogicalPlanOptimizer$ReplaceMissingFieldWithNull.apply(LocalLogicalPlanOptimizer.java:123)
at org.elasticsearch.xpack.esql.optimizer.LocalLogicalPlanOptimizer$ReplaceMissingFieldWithNull.apply(LocalLogicalPlanOptimizer.java:119)
at org.elasticsearch.xpack.esql.core.rule.ParameterizedRuleExecutor.lambda$transform$0(ParameterizedRuleExecutor.java:29)
at org.elasticsearch.xpack.esql.core.rule.RuleExecutor$Transformation.<init>(RuleExecutor.java:88)
at org.elasticsearch.xpack.esql.core.rule.RuleExecutor.executeWithInfo(RuleExecutor.java:167)
at org.elasticsearch.xpack.esql.core.rule.RuleExecutor.execute(RuleExecutor.java:136)
at org.elasticsearch.xpack.esql.optimizer.LocalLogicalPlanOptimizer.localOptimize(LocalLogicalPlanOptimizer.java:98)
at org.elasticsearch.xpack.esql.planner.PlannerUtils.lambda$localPlan$7(PlannerUtils.java:157)
at org.elasticsearch.xpack.esql.core.tree.Node.lambda$transformUp$11(Node.java:198)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:192)
at org.elasticsearch.xpack.esql.core.tree.Node.lambda$transformUp$10(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.transformChildren(Node.java:211)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:190)
at org.elasticsearch.xpack.esql.core.tree.Node.transformUp(Node.java:198)
at org.elasticsearch.xpack.esql.planner.PlannerUtils.localPlan(PlannerUtils.java:155)
at org.elasticsearch.xpack.esql.planner.PlannerUtils.localPlan(PlannerUtils.java:144)
at org.elasticsearch.xpack.esql.planner.PlannerUtils.localPlan(PlannerUtils.java:137)
at org.elasticsearch.xpack.esql.plugin.ComputeService.runCompute(ComputeService.java:428)
at org.elasticsearch.xpack.esql.plugin.ComputeService$DataNodeRequestExecutor.lambda$runBatch$2(ComputeService.java:653)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionListener$2.onResponse(ActionListener.java:248)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:57)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:54)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
at org.elasticsearch.server@8.15.0/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
at org.elasticsearch.xpack.esql.plugin.ComputeService.lambda$acquireSearchContexts$23(ComputeService.java:511)
at org.elasticsearch.base@8.15.0/org.elasticsearch.core.AbstractRefCounted$1.closeInternal(AbstractRefCounted.java:118)
at org.elasticsearch.base@8.15.0/org.elasticsearch.core.AbstractRefCounted.decRef(AbstractRefCounted.java:70)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.support.RefCountingRunnable.close(RefCountingRunnable.java:112)
at org.elasticsearch.xpack.esql.plugin.ComputeService.acquireSearchContexts(ComputeService.java:524)
at org.elasticsearch.xpack.esql.plugin.ComputeService$DataNodeRequestExecutor.runBatch(ComputeService.java:650)
at org.elasticsearch.xpack.esql.plugin.ComputeService$DataNodeRequestExecutor.onBatchCompleted(ComputeService.java:667)
at org.elasticsearch.xpack.esql.plugin.ComputeService$DataNodeRequestExecutor.lambda$runBatch$1(ComputeService.java:657)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionListener$2.onResponse(ActionListener.java:248)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:307)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionListenerImplementations$MappedActionListener.onResponse(ActionListenerImplementations.java:95)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionListenerImplementations$RunAfterActionListener.onResponse(ActionListenerImplementations.java:269)
at org.elasticsearch.compute.operator.DriverRunner$1.done(DriverRunner.java:84)
at org.elasticsearch.compute.operator.DriverRunner$1.onResponse(DriverRunner.java:46)
at org.elasticsearch.compute.operator.DriverRunner$1.onResponse(DriverRunner.java:43)
at org.elasticsearch.server@8.15.0/org.elasticsearch.action.ActionListener$2.onResponse(ActionListener.java:248)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportResponseHandler$1.handleResponse(TransportResponseHandler.java:53)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportResponseHandler$Empty.handleResponse(TransportResponseHandler.java:43)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportResponseHandler$Empty.handleResponse(TransportResponseHandler.java:35)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1757)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1480)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1577)
at org.elasticsearch.server@8.15.0/org.elasticsearch.transport.TransportService$DirectResponseChannel$1.doRun(TransportService.java:1557)
at org.elasticsearch.server@8.15.0/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
at org.elasticsearch.server@8.15.0/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
at org.elasticsearch.server@8.15.0/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
at org.elasticsearch.server@8.15.0/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1570)
The text was updated successfully, but these errors were encountered:
…ll (#110373)
Fix ReplaceMissingFieldWithNull by explicitly listing the commands that
can be optimized replacing missing FieldAttributed with NULL Literals.
Also adding a unit test that demonstrates possible scenarios where
introducing a new command can lead to `ClassCastException` with
`ReplaceMissingFieldWithNull` local optimization rule and an integration
test that covers #109974Fixes#110150
The problem happened on a very wide index pattern, where most likely some nodes are executing an
MV_EXPAN
on an attribute that does not exist on the local shards.The local planner is running ReplaceMissingFieldWithNull optimization and probably replacing the target of MV_EXPAND with a
Literal
, but MV_EXPAND defines it asNamedExpression
.Happens with the following queries:
For this second query, in my specific case it fails with some specific limits (eg.
LIMIT 10
) but not with higher limits (eg.LIMIT 1000
)The text was updated successfully, but these errors were encountered: