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 e5085ce9944b1..d56d7471d498e 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -4313,17 +4313,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) { + // we want to fail the shard in the case prepareForEngineReset throws failShard("unable to reset engine", e); } } 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..c07b396626c45 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java @@ -4563,11 +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 { - ; - } + public void prepareForEngineReset() throws IOException {} }; } finally { newEngineCreated.countDown();