mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-27 17:10:22 -04:00
ESQL: Aggressive release of shard contexts (#129454)
Keep better track of shard contexts using RefCounted, so they can be released more aggressively during operator processing. For example, during TopN, we can potentially release some contexts if they don't pass the limit filter. This is done in preparation of TopN fetch optimization, which will delay the fetching of additional columns to the data node coordinator, instead of doing it in each individual worker, thereby reducing IO. Since the node coordinator would need to maintain the shard contexts for a potentially longer duration, it is important we try to release what we can eariler. An even more advanced optimization is to delay fetching to the main cluster coordinator, but that would be more involved, since we need to first figure out how to transport the shard contexts between nodes. Summary of main changes: DocVector now maintains a RefCounted instance per shard. Things which can build or release DocVectors (e.g., LuceneSourceOperator, TopNOperator), can also hold RefCounted instances, so they can pass them to DocVector and also ensure contexts aren't released if they can still be potentially used later. Driver's main loop iteration (runSingleLoopIteration), now closes its operators even between different operator processing. This is extra aggressive, and was mostly done to improve testability. Added a couple of tests to TopNOperator and a new integration test EsqlTopNShardManagementIT, which uses the pausable plugin framework to check that TopNOperator releases things as early as possible..
This commit is contained in:
parent
e6cf2234fc
commit
6970bd24a0
68 changed files with 1021 additions and 230 deletions
|
@ -152,7 +152,12 @@ public class MockSearchService extends SearchService {
|
|||
@Override
|
||||
public SearchContext createSearchContext(ShardSearchRequest request, TimeValue timeout) throws IOException {
|
||||
SearchContext searchContext = super.createSearchContext(request, timeout);
|
||||
onPutContext.accept(searchContext.readerContext());
|
||||
try {
|
||||
onCreateSearchContext.accept(searchContext);
|
||||
} catch (Exception e) {
|
||||
searchContext.close();
|
||||
throw e;
|
||||
}
|
||||
searchContext.addReleasable(() -> onRemoveContext.accept(searchContext.readerContext()));
|
||||
return searchContext;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue