From 11dc9fe249dd609ec986d5d887a67926c3b5d244 Mon Sep 17 00:00:00 2001 From: Simon Willnauer Date: Thu, 18 Apr 2019 19:14:23 +0200 Subject: [PATCH] Mark searcher as accessed in acquireSearcher (#41335) This fixes an issue where every N seconds a slow search request is triggered since the searcher access time is not set unless the shard is idle. This change moves to a more pro-active approach setting the searcher as accessed all the time. --- .../main/java/org/elasticsearch/index/shard/IndexShard.java | 5 ++--- .../java/org/elasticsearch/index/shard/IndexShardTests.java | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java index d1b5a25db6d..5c75b47d655 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -1215,6 +1215,7 @@ public class IndexShard extends AbstractIndexShardComponent implements IndicesCl private Engine.Searcher acquireSearcher(String source, Engine.SearcherScope scope) { readAllowed(); + markSearcherAccessed(); final Engine engine = getEngine(); final Engine.Searcher searcher = engine.acquireSearcher(source, scope); assert ElasticsearchDirectoryReader.unwrap(searcher.getDirectoryReader()) @@ -2990,9 +2991,7 @@ public class IndexShard extends AbstractIndexShardComponent implements IndicesCl * true if the listener was registered to wait for a refresh. */ public final void awaitShardSearchActive(Consumer listener) { - if (isSearchIdle()) { - markSearcherAccessed(); // move the shard into non-search idle - } + markSearcherAccessed(); // move the shard into non-search idle final Translog.Location location = pendingRefreshLocation.get(); if (location != null) { addRefreshListener(location, (b) -> { diff --git a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java index 41b67369647..0ac168519c6 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java @@ -3240,6 +3240,12 @@ public class IndexShardTests extends IndexShardTestCase { // now loop until we are fast enough... shouldn't take long primary.awaitShardSearchActive(aBoolean -> {}); } while (primary.isSearchIdle()); + + assertBusy(() -> assertTrue(primary.isSearchIdle())); + do { + // now loop until we are fast enough... shouldn't take long + primary.acquireSearcher("test").close(); + } while (primary.isSearchIdle()); closeShards(primary); }