diff --git a/server/src/main/java/org/elasticsearch/index/engine/Engine.java b/server/src/main/java/org/elasticsearch/index/engine/Engine.java
index 8aadc64806c5f..5bfec3c2e9eb4 100644
--- a/server/src/main/java/org/elasticsearch/index/engine/Engine.java
+++ b/server/src/main/java/org/elasticsearch/index/engine/Engine.java
@@ -1869,13 +1869,6 @@ public interface Warmer {
*/
public abstract void skipTranslogRecovery();
- /**
- * Returns true iff this engine is currently recovering from translog.
- */
- public boolean isRecovering() {
- return false;
- }
-
/**
* Tries to prune buffered deletes from the version map.
*/
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 8fe9547cd7335..60162e95a0762 100644
--- a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java
+++ b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java
@@ -2459,7 +2459,7 @@ protected void commitIndexWriter(final IndexWriter writer, final Translog transl
}
}
- private void ensureCanFlush() {
+ final void ensureCanFlush() {
// translog recover happens after the engine is fully constructed
// if we are in this stage we have to prevent flushes from this
// engine otherwise we might loose documents if the flush succeeds
@@ -2651,11 +2651,6 @@ public Closeable acquireRetentionLock() {
}
}
- @Override
- public boolean isRecovering() {
- return pendingTranslogRecovery.get();
- }
-
/**
* Gets the commit data from {@link IndexWriter} as a map.
*/
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 13f9092a3ae28..fa452270fab6b 100644
--- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java
+++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java
@@ -1054,12 +1054,7 @@ public CompletionStats completionStats(String... fields) {
public Engine.SyncedFlushResult syncFlush(String syncId, Engine.CommitId expectedCommitId) {
verifyNotClosed();
logger.trace("trying to sync flush. sync id [{}]. expected commit id [{}]]", syncId, expectedCommitId);
- Engine engine = getEngine();
- if (engine.isRecovering()) {
- throw new IllegalIndexShardStateException(shardId(), state, "syncFlush is only allowed if the engine is not recovery" +
- " from translog");
- }
- return engine.syncFlush(syncId, expectedCommitId);
+ return getEngine().syncFlush(syncId, expectedCommitId);
}
/**
@@ -1078,15 +1073,8 @@ public Engine.CommitId flush(FlushRequest request) {
* since we use Engine#writeIndexingBuffer for this now.
*/
verifyNotClosed();
- final Engine engine = getEngine();
- if (engine.isRecovering()) {
- throw new IllegalIndexShardStateException(
- shardId(),
- state,
- "flush is only allowed if the engine is not recovery from translog");
- }
final long time = System.nanoTime();
- final Engine.CommitId commitId = engine.flush(force, waitIfOngoing);
+ final Engine.CommitId commitId = getEngine().flush(force, waitIfOngoing);
flushMetric.inc(System.nanoTime() - time);
return commitId;
}
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 0c2133b598099..426ab3f51538e 100644
--- a/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java
+++ b/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java
@@ -731,16 +731,20 @@ public long getProcessedCheckpoint() {
}
public void testFlushIsDisabledDuringTranslogRecovery() throws IOException {
- assertFalse(engine.isRecovering());
+ engine.ensureCanFlush(); // recovered already
ParsedDocument doc = testParsedDocument("1", null, testDocumentWithTextField(), SOURCE, null);
engine.index(indexForDoc(doc));
engine.close();
engine = new InternalEngine(engine.config());
+ expectThrows(IllegalStateException.class, engine::ensureCanFlush);
expectThrows(IllegalStateException.class, () -> engine.flush(true, true));
- assertTrue(engine.isRecovering());
- engine.recoverFromTranslog(translogHandler, Long.MAX_VALUE);
- assertFalse(engine.isRecovering());
+ if (randomBoolean()) {
+ engine.recoverFromTranslog(translogHandler, Long.MAX_VALUE);
+ } else {
+ engine.skipTranslogRecovery();
+ }
+ engine.ensureCanFlush(); // ready
doc = testParsedDocument("2", null, testDocumentWithTextField(), SOURCE, null);
engine.index(indexForDoc(doc));
engine.flush();
@@ -2825,7 +2829,7 @@ public void testCurrentTranslogIDisCommitted() throws IOException {
{
for (int i = 0; i < 2; i++) {
try (InternalEngine engine = new InternalEngine(config)) {
- assertTrue(engine.isRecovering());
+ expectThrows(IllegalStateException.class, engine::ensureCanFlush);
Map userData = engine.getLastCommittedSegmentInfos().getUserData();
if (i == 0) {
assertEquals("1", userData.get(Translog.TRANSLOG_GENERATION_KEY));