Skip to content

ESQL: using LOOKUP JOIN with same index as in FROM not working #118865

@alex-spies

Description

@alex-spies

Reproducer:

$ curl -u elastic:password -H "Content-Type: application/json" "127.0.0.1:9200/languages_lookup" -XPUT -d '{                                                        17:28
  "mappings": {
        "properties": {"language_code": {"type": "keyword"}, "language_name":{"type": "keyword"}}}, "settings": {"index": {"mode": "lookup"}}}'


curl -u elastic:password -H "Content-Type: application/json" "127.0.0.1:9200/_query?format=txt" -d '                                                              17:30
{
  "query": "from languages_lookup | lookup join languages_lookup on language_code"
}
'

->

[2024-12-17T17:28:31,740][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [runTask-0] fatal error in thread [elasticsearch[runTask-0][search_coordination][T#8]], exiting java.lang.AssertionError: expected concrete indices with data node plan but got empty; data node plan ExchangeSinkExec[[language_code{f}#30],false]
\_FragmentExec[filter=null, estimatedRowSize=50, reducer=[], fragment=[<>
Project[[language_code{f}#30]]
\_Limit[1000[INTEGER]]
  \_EsRelation[languages_lookup][language_code{f}#30, language_name{f}#31]<>]]
        at org.elasticsearch.xpack.esql.plugin.ComputeService.execute(ComputeService.java:199)
        at org.elasticsearch.xpack.esql.plugin.TransportEsqlQueryAction.lambda$innerExecute$2(TransportEsqlQueryAction.java:178)
        at org.elasticsearch.xpack.esql.session.EsqlSession.executeSubPlans(EsqlSession.java:217)
        at org.elasticsearch.xpack.esql.session.EsqlSession.executeOptimizedPlan(EsqlSession.java:182)
        at org.elasticsearch.xpack.esql.session.EsqlSession$1.onResponse(EsqlSession.java:161)
        at org.elasticsearch.xpack.esql.session.EsqlSession$1.onResponse(EsqlSession.java:158)
        at org.elasticsearch.xpack.esql.session.EsqlSession.analyzeAndMaybeRetry(EsqlSession.java:511)
        at org.elasticsearch.xpack.esql.session.EsqlSession.lambda$analyzedPlan$16(EsqlSession.java:330)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:247)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener$SuccessResult.complete(SubscribableListener.java:387)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener.tryComplete(SubscribableListener.java:307)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener.setResult(SubscribableListener.java:336)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener.onResponse(SubscribableListener.java:250)
        at org.elasticsearch.xpack.esql.session.EsqlSession.lambda$analyzedPlan$15(EsqlSession.java:327)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:247)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener$SuccessResult.complete(SubscribableListener.java:387)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener.tryComplete(SubscribableListener.java:307)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener.setResult(SubscribableListener.java:336)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.SubscribableListener.onResponse(SubscribableListener.java:250)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListenerImplementations$MappedActionListener.onResponse(ActionListenerImplementations.java:97)
        at org.elasticsearch.xpack.esql.session.IndexResolver.lambda$resolveAsMergedMapping$0(IndexResolver.java:89)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:247)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:400)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:203)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:197)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:336)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:400)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:33)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.ActionListenerImplementations$MappedActionListener.onResponse(ActionListenerImplementations.java:97)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.mergeIndexResponses(TransportFieldCapabilitiesAction.java:339)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.lambda$doExecuteForked$7(TransportFieldCapabilitiesAction.java:236)
        at org.elasticsearch.base@9.0.0-SNAPSHOT/org.elasticsearch.core.AbstractRefCounted$1.closeInternal(AbstractRefCounted.java:125)
        at org.elasticsearch.base@9.0.0-SNAPSHOT/org.elasticsearch.core.AbstractRefCounted.decRef(AbstractRefCounted.java:77)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.support.RefCountingRunnable.close(RefCountingRunnable.java:113)
        at org.elasticsearch.base@9.0.0-SNAPSHOT/org.elasticsearch.core.Releasables$4.close(Releasables.java:161)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.RunOnce.run(RunOnce.java:41)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.fieldcaps.RequestDispatcher.innerExecute(RequestDispatcher.java:159)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.action.fieldcaps.RequestDispatcher$1.doRun(RequestDispatcher.java:128)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:34)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1023)
        at org.elasticsearch.server@9.0.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)
        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:1575)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions