From 247a9d3ba079665ad4c7cafc52a10b6df987f207 Mon Sep 17 00:00:00 2001 From: tlrx Date: Tue, 11 Feb 2025 15:16:47 +0100 Subject: [PATCH 1/4] Sets the new engine before closing the previous one in IndexShard.resetEngine --- .../java/org/elasticsearch/index/shard/IndexShard.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 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 b172b6ff4ba39..f9622668642f6 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -4317,17 +4317,15 @@ public void resetEngine() { assert waitForEngineOrClosedShardListeners.isDone(); try { synchronized (engineMutex) { - final var currentEngine = getEngine(); - currentEngine.prepareForEngineReset(); - var engineConfig = newEngineConfig(replicationTracker); verifyNotClosed(); - IOUtils.close(currentEngine); - var newEngine = createEngine(engineConfig); - currentEngineReference.set(newEngine); + getEngine().prepareForEngineReset(); + var newEngine = createEngine(newEngineConfig(replicationTracker)); + IOUtils.close(currentEngineReference.getAndSet(newEngine)); onNewEngine(newEngine); } onSettingsChanged(); } catch (Exception e) { + assert false : e; failShard("unable to reset engine", e); } } From af4cbd32acf5733daa5202e15175a2806eb45064 Mon Sep 17 00:00:00 2001 From: tlrx Date: Tue, 11 Feb 2025 16:15:42 +0100 Subject: [PATCH 2/4] remove assert --- .../src/main/java/org/elasticsearch/index/shard/IndexShard.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f9622668642f6..a55d426de863d 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -4325,7 +4325,7 @@ public void resetEngine() { } onSettingsChanged(); } catch (Exception e) { - assert false : e; + // we want to fail the shard in the case prepareForEngineReset throws failShard("unable to reset engine", e); } } From 4ac36972a36a1087000aa96853e6c45d1fea7b3e Mon Sep 17 00:00:00 2001 From: tlrx Date: Tue, 11 Feb 2025 16:15:50 +0100 Subject: [PATCH 3/4] adjust test --- .../java/org/elasticsearch/index/shard/IndexShardTests.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 4549a329d499a..339dfe18ea14d 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java @@ -4563,10 +4563,9 @@ public void testResetEngine() throws Exception { var newEngineCreated = new CountDownLatch(2); var indexShard = newStartedShard(true, Settings.EMPTY, config -> { try { - return new ReadOnlyEngine(config, null, null, true, Function.identity(), true, true) { + return new ReadOnlyEngine(config, null, new TranslogStats(), false, Function.identity(), true, true) { @Override public void prepareForEngineReset() throws IOException { - ; } }; } finally { From 26592e2a6dd785d37ed07b3a65a0148cd4199932 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Tue, 11 Feb 2025 15:23:25 +0000 Subject: [PATCH 4/4] [CI] Auto commit changes from spotless --- .../java/org/elasticsearch/index/shard/IndexShardTests.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 339dfe18ea14d..c07b396626c45 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java @@ -4565,8 +4565,7 @@ public void testResetEngine() throws Exception { try { return new ReadOnlyEngine(config, null, new TranslogStats(), false, Function.identity(), true, true) { @Override - public void prepareForEngineReset() throws IOException { - } + public void prepareForEngineReset() throws IOException {} }; } finally { newEngineCreated.countDown();