Skip to content

Enable concurrent intra merge for HNSW graphs #108164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: lucene_snapshot
Choose a base branch
from

Conversation

mayya-sharipova
Copy link
Contributor

apache/lucene#12660 introduced concurrent HNSW merge,
and apache/lucene#13124 made ConcurrentMergeScheduler
to provide an intra merge executor.

But to enable concurrent intra merge for HNSW graphs we still need to provide numMergeWorker to the codec definition.
This PR does the following:

  • provides numMergeWorker to the HNSW vectors codecs definions, where numMergerWorkes set as a node's property of index.merge.scheduler.max_thread_count
  • enables concurrent merge only for force merge operations.

@mayya-sharipova mayya-sharipova requested a review from benwtrent May 1, 2024 19:15
@elasticsearchmachine elasticsearchmachine added the needs:triage Requires assignment of a team area label label May 1, 2024
@mayya-sharipova mayya-sharipova requested a review from jpountz May 1, 2024 19:15
@mayya-sharipova mayya-sharipova added :Search Relevance/Vectors Vector search >enhancement v8.15.0 and removed needs:triage Requires assignment of a team area label labels May 1, 2024
@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-search (Team:Search)

@elasticsearchmachine elasticsearchmachine added the Team:Search Meta label for search team label May 1, 2024
@mayya-sharipova mayya-sharipova force-pushed the hnsw-concurrent-merge branch from 3a2da0b to 81d8248 Compare May 1, 2024 19:56
Lucene PR  apache/lucene#12660 introduced
concurrent HNSW merge and PR
 apache/lucene#13124 made ConcurrentMergeScheduler
to provide an intra merge executor.

But to enable concurrent intra merge for HNSW graphs we still need to
provide numMergeWorker to the codec definition.
This PR does the following:

- provides numMergeWorker to the HNSW vectors codecs definions, where
numMergerWorkes set as a node's property of index.merge.scheduler.max_thread_count
- enables concurrent merge only for force merge operations.
@mayya-sharipova mayya-sharipova force-pushed the hnsw-concurrent-merge branch from 0456125 to 1ac0e0d Compare May 6, 2024 15:26
@benwtrent
Copy link
Member

@mayya-sharipova one of the failures is due to your change:

[2024-05-06T08:39:19,509][INFO ][o.e.c.m.MetadataCreateIndexService] [test-cluster-0] [.synonyms-2] creating index, cause [auto(bulk api)], templates [], shards [1]/[0]
[2024-05-06T08:39:19,543][INFO ][o.e.c.r.a.AllocationService] [test-cluster-0] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[.synonyms-2][0]]])." previous.health="YELLOW" reason="shards started [[.synonyms-2][0]]"
[2024-05-06T08:39:19,990][WARN ][o.e.i.e.Engine           ] [test-cluster-0] [.synonyms-2][0] failed engine [merge failed]
org.apache.lucene.index.MergePolicy$MergeException: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge
	at org.elasticsearch.index.engine.InternalEngine$EngineMergeScheduler$2.doRun(InternalEngine.java:2875) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge
	at org.apache.lucene.index.IndexWriter.hasPendingMerges(IndexWriter.java:2433) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.elasticsearch.index.engine.InternalEngine$EngineMergeScheduler.afterMerge(InternalEngine.java:2833) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.doMerge(ElasticsearchConcurrentMergeScheduler.java:135) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:721) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
Caused by: java.lang.NullPointerException: Executor is null
	at java.util.Objects.requireNonNull(Objects.java:259) ~[?:?]
	at org.apache.lucene.search.TaskExecutor.<init>(TaskExecutor.java:62) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:138) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:5290) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4758) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter$IndexWriterMergeSource.merge(IndexWriter.java:6579) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:660) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.doMerge(ElasticsearchConcurrentMergeScheduler.java:130) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:721) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
[2024-05-06T08:39:19,992][WARN ][o.e.i.c.IndicesClusterStateService] [test-cluster-0] [.synonyms-2][0] marking and sending shard failed due to [shard failure, reason [merge failed]]
org.apache.lucene.index.MergePolicy$MergeException: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge
	at org.elasticsearch.index.engine.InternalEngine$EngineMergeScheduler$2.doRun(InternalEngine.java:2875) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge
	at org.apache.lucene.index.IndexWriter.hasPendingMerges(IndexWriter.java:2433) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.elasticsearch.index.engine.InternalEngine$EngineMergeScheduler.afterMerge(InternalEngine.java:2833) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.doMerge(ElasticsearchConcurrentMergeScheduler.java:135) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:721) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
Caused by: java.lang.NullPointerException: Executor is null
	at java.util.Objects.requireNonNull(Objects.java:259) ~[?:?]
	at org.apache.lucene.search.TaskExecutor.<init>(TaskExecutor.java:62) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:138) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:5290) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4758) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter$IndexWriterMergeSource.merge(IndexWriter.java:6579) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:660) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.doMerge(ElasticsearchConcurrentMergeScheduler.java:130) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:721) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
[2024-05-06T08:39:19,994][WARN ][o.e.c.r.a.AllocationService] [test-cluster-0] failing shard [FailedShard[routingEntry=[.synonyms-2][0], node[kx5TiOUQQZu_joht3CAVaw], [P], s[STARTED], a[id=NN3eXAbAQNuXF-AkA2dn5Q], failed_attempts[0], message=shard failure, reason [merge failed], failure=org.apache.lucene.index.MergePolicy$MergeException: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge, markAsStale=true]]
org.apache.lucene.index.MergePolicy$MergeException: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge
	at org.elasticsearch.index.engine.InternalEngine$EngineMergeScheduler$2.doRun(InternalEngine.java:2875) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.IllegalStateException: this writer hit an unrecoverable error; cannot merge
	at org.apache.lucene.index.IndexWriter.hasPendingMerges(IndexWriter.java:2433) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.elasticsearch.index.engine.InternalEngine$EngineMergeScheduler.afterMerge(InternalEngine.java:2833) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.doMerge(ElasticsearchConcurrentMergeScheduler.java:135) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:721) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
Caused by: java.lang.NullPointerException: Executor is null
	at java.util.Objects.requireNonNull(Objects.java:259) ~[?:?]
	at org.apache.lucene.search.TaskExecutor.<init>(TaskExecutor.java:62) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:138) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:5290) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4758) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.IndexWriter$IndexWriterMergeSource.merge(IndexWriter.java:6579) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:660) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
	at org.elasticsearch.index.engine.ElasticsearchConcurrentMergeScheduler.doMerge(ElasticsearchConcurrentMergeScheduler.java:130) ~[elasticsearch-8.15.0-SNAPSHOT.jar:?]
	at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:721) ~[lucene-core-9.11.0-snapshot-26ec4c600d7.jar:?]
[2024-05-06T08:39:19,996][INFO ][o.e.c.r.a.AllocationService] [test-cluster-0] current.health="RED" message="Cluster health status changed from [GREEN] to [RED] (reason: [shards failed [[.synonyms-2][0]]])." previous.health="GREEN" reason="shards failed [[.synonyms-2][0]]"

One of the test failures is worrisome and indicates a leak @original-brownbear :

[2024-05-06T08:40:57,512][ERROR][o.e.t.LeakTracker        ] [test-cluster-0] LEAK: resource was not cleaned up before it was garbage-collected.
Recent access records: 
#1:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.action.search.SearchResponse.decRef(SearchResponse.java:233)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:291)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.sendSearchResponse(AbstractSearchAsyncAction.java:707)
	[email protected]/org.elasticsearch.action.search.FetchLookupFieldsPhase.run(FetchLookupFieldsPhase.java:75)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.onPhaseDone(ExpandSearchPhase.java:153)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.run(ExpandSearchPhase.java:54)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:239)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)
#2:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.action.search.SearchResponseSections.decRef(SearchResponseSections.java:111)
	[email protected]/org.elasticsearch.core.IOUtils.close(IOUtils.java:71)
	[email protected]/org.elasticsearch.core.IOUtils.close(IOUtils.java:119)
	[email protected]/org.elasticsearch.core.Releasables.close(Releasables.java:25)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.lambda$new$1(AbstractSearchAsyncAction.java:167)
	[email protected]/org.elasticsearch.action.ActionListenerImplementations$RunAfterActionListener.onResponse(ActionListenerImplementations.java:271)
	[email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:314)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.sendSearchResponse(AbstractSearchAsyncAction.java:707)
	[email protected]/org.elasticsearch.action.search.FetchLookupFieldsPhase.run(FetchLookupFieldsPhase.java:75)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.onPhaseDone(ExpandSearchPhase.java:153)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.run(ExpandSearchPhase.java:54)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:239)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)
#3:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.core.RefCounted.mustIncRef(RefCounted.java:71)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.lambda$doRun$0(ExpandSearchPhase.java:104)
	[email protected]/org.elasticsearch.action.ActionListener$2.onResponse(ActionListener.java:171)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:307)
	[email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:314)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.search.TransportMultiSearchAction$1.finish(TransportMultiSearchAction.java:190)
	[email protected]/org.elasticsearch.action.search.TransportMultiSearchAction$1.handleResponse(TransportMultiSearchAction.java:176)
	[email protected]/org.elasticsearch.action.search.TransportMultiSearchAction$1.onResponse(TransportMultiSearchAction.java:161)
	[email protected]/org.elasticsearch.action.search.TransportMultiSearchAction$1.onResponse(TransportMultiSearchAction.java:157)
	[email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:314)
	[email protected]/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:202)
	[email protected]/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:196)
	[email protected]/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:307)
	[email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:314)
	[email protected]/org.elasticsearch.action.search.TransportSearchAction.lambda$doExecute$2(TransportSearchAction.java:307)
	[email protected]/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:245)
	[email protected]/org.elasticsearch.action.ActionListenerImplementations$RunAfterActionListener.onResponse(ActionListenerImplementations.java:269)
	[email protected]/org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:314)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.sendSearchResponse(AbstractSearchAsyncAction.java:707)
	[email protected]/org.elasticsearch.action.search.FetchLookupFieldsPhase.run(FetchLookupFieldsPhase.java:75)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.onPhaseDone(ExpandSearchPhase.java:153)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.run(ExpandSearchPhase.java:54)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:239)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)
#4:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.action.search.SearchResponse.<init>(SearchResponse.java:200)
	[email protected]/org.elasticsearch.action.search.SearchResponse.<init>(SearchResponse.java:163)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.buildSearchResponse(AbstractSearchAsyncAction.java:677)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.sendSearchResponse(AbstractSearchAsyncAction.java:707)
	[email protected]/org.elasticsearch.action.search.FetchLookupFieldsPhase.run(FetchLookupFieldsPhase.java:75)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.onPhaseDone(ExpandSearchPhase.java:153)
	[email protected]/org.elasticsearch.action.search.ExpandSearchPhase.run(ExpandSearchPhase.java:54)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executePhase(AbstractSearchAsyncAction.java:455)
	[email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:449)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:239)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)
#5:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.action.search.SearchPhaseController.merge(SearchPhaseController.java:377)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:236)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)
#6:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.action.search.SearchResponseSections.<init>(SearchResponseSections.java:67)
	[email protected]/org.elasticsearch.action.search.SearchPhaseController$ReducedQueryPhase.buildResponse(SearchPhaseController.java:777)
	[email protected]/org.elasticsearch.action.search.SearchPhaseController.merge(SearchPhaseController.java:375)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:236)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)
Created at:
	in [elasticsearch[test-cluster-0][search][T#2]][]
	[email protected]/org.elasticsearch.search.SearchHits.<init>(SearchHits.java:75)
	[email protected]/org.elasticsearch.action.search.SearchPhaseController.getHits(SearchPhaseController.java:476)
	[email protected]/org.elasticsearch.action.search.SearchPhaseController.merge(SearchPhaseController.java:370)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.moveToNextPhase(FetchSearchPhase.java:236)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase.lambda$innerRun$2(FetchSearchPhase.java:128)
	[email protected]/org.elasticsearch.action.search.CountedCollector.countDown(CountedCollector.java:40)
	[email protected]/org.elasticsearch.action.search.ArraySearchPhaseResults.consumeResult(ArraySearchPhaseResults.java:47)
	[email protected]/org.elasticsearch.action.search.CountedCollector.onResult(CountedCollector.java:48)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:186)
	[email protected]/org.elasticsearch.action.search.FetchSearchPhase$2.innerOnResponse(FetchSearchPhase.java:181)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:33)
	[email protected]/org.elasticsearch.action.search.SearchActionListener.onResponse(SearchActionListener.java:18)
	[email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleResponse(ActionListenerResponseHandler.java:48)
	[email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleResponse(SearchTransportService.java:628)
	[email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleResponse(TransportService.java:1743)
	[email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleResponse(TransportService.java:1466)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processResponse(TransportService.java:1563)
	[email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1537)
	[email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:35)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:32)
	[email protected]/org.elasticsearch.action.support.ChannelActionListener.onResponse(ChannelActionListener.java:19)
	[email protected]/org.elasticsearch.search.SearchService$2.onResponse(SearchService.java:1201)
	[email protected]/org.elasticsearch.action.ActionListener.respondAndRelease(ActionListener.java:289)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:78)
	[email protected]/org.elasticsearch.action.ActionRunnable$3.accept(ActionRunnable.java:75)
	[email protected]/org.elasticsearch.action.ActionRunnable$4.doRun(ActionRunnable.java:100)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	[email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	[email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:984)
	[email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)

Comment on lines +82 to +92
// TODO: this is temporarily, remove this override and enable multithreaded merges for all kind of merges
@Override
public Executor getIntraMergeExecutor(MergePolicy.OneMerge merge) {
// Enable multithreaded merges only for force merge operations
if (merge.getStoreMergeInfo().mergeMaxNumSegments != -1) {
return super.getIntraMergeExecutor(merge);
} else {
return null;
}
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not think this should return null. It should instead return a same thread executor.

@@ -838,7 +841,7 @@ private abstract static class IndexOptions implements ToXContent {
this.type = type;
}

abstract KnnVectorsFormat getVectorsFormat();
abstract KnnVectorsFormat getVectorsFormat(int mergeThreadCount);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something about this really bugs me. The merge thread count is a dynamically updatable value. But doing this, is it really dynamic for the workers in the dense vector field mapper?

@javanna javanna added Team:Search Relevance Meta label for the Search Relevance team in Elasticsearch and removed Team:Search Meta label for search team labels Jul 16, 2024
@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-search-relevance (Team:Search Relevance)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
>enhancement :Search Relevance/Vectors Vector search Team:Search Relevance Meta label for the Search Relevance team in Elasticsearch v9.1.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants