From 41839cf9a857cb1eef743f36b51a55d10f7073e1 Mon Sep 17 00:00:00 2001 From: Nhat Nguyen Date: Wed, 5 Sep 2018 19:03:34 -0400 Subject: [PATCH] Acquire seacher on closing engine should throw ACE (#33331) Closes #33330 --- .../java/org/elasticsearch/index/engine/InternalEngine.java | 4 +++- .../org/elasticsearch/index/engine/InternalEngineTests.java | 5 +++++ .../elasticsearch/index/shard/PrimaryReplicaSyncerTests.java | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java index 00d1f67f01bd9..f902ce0750245 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java @@ -2014,7 +2014,9 @@ public Searcher acquireSearcher(String source, SearcherScope scope) { /* Acquire order here is store -> manager since we need * to make sure that the store is not closed before * the searcher is acquired. */ - store.incRef(); + if (store.tryIncRef() == false) { + throw new AlreadyClosedException(shardId + " store is closed", failedEngine.get()); + } Releasable releasable = store::decRef; try { final ReferenceManager referenceManager; diff --git a/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java b/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java index d3aead9e44e16..9cc8d859c6ff1 100644 --- a/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java +++ b/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java @@ -5020,6 +5020,11 @@ public void testLastRefreshCheckpoint() throws Exception { assertThat(engine.lastRefreshedCheckpoint(), equalTo(engine.getLocalCheckpoint())); } + public void testAcquireSearcherOnClosingEngine() throws Exception { + engine.close(); + expectThrows(AlreadyClosedException.class, () -> engine.acquireSearcher("test")); + } + private static void trimUnsafeCommits(EngineConfig config) throws IOException { final Store store = config.getStore(); final TranslogConfig translogConfig = config.getTranslogConfig(); diff --git a/server/src/test/java/org/elasticsearch/index/shard/PrimaryReplicaSyncerTests.java b/server/src/test/java/org/elasticsearch/index/shard/PrimaryReplicaSyncerTests.java index 36d52d4475b1a..29b16ca28f4da 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/PrimaryReplicaSyncerTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/PrimaryReplicaSyncerTests.java @@ -125,7 +125,6 @@ public void testSyncerSendsOffCorrectDocuments() throws Exception { closeShards(shard); } - @AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/33330") public void testSyncerOnClosingShard() throws Exception { IndexShard shard = newStartedShard(true); AtomicBoolean syncActionCalled = new AtomicBoolean();