From b78f7bc51d07bc73b8d2c41f45595b61bff9edcf Mon Sep 17 00:00:00 2001 From: Boaz Leskes Date: Sun, 18 Dec 2016 08:05:59 +0100 Subject: [PATCH] InternalEngine should use global checkpoint when committing the translog relates to #22212 --- .../org/elasticsearch/index/engine/InternalEngine.java | 2 +- .../index/engine/InternalEngineTests.java | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/elasticsearch/index/engine/InternalEngine.java b/core/src/main/java/org/elasticsearch/index/engine/InternalEngine.java index 905b08f2bd3..2957b9ab064 100644 --- a/core/src/main/java/org/elasticsearch/index/engine/InternalEngine.java +++ b/core/src/main/java/org/elasticsearch/index/engine/InternalEngine.java @@ -188,7 +188,7 @@ public class InternalEngine extends Engine { seqNoService().markSeqNoAsCompleted(seqNoService().getLocalCheckpoint() + 1); } indexWriter = writer; - translog = openTranslog(engineConfig, writer, () -> seqNoService().getLocalCheckpoint()); + translog = openTranslog(engineConfig, writer, () -> seqNoService().getGlobalCheckpoint()); assert translog.getGeneration() != null; } catch (IOException | TranslogCorruptedException e) { throw new EngineCreationFailureException(shardId, "failed to create engine", e); diff --git a/core/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java b/core/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java index 22746aaf2a1..523efb6829c 100644 --- a/core/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java +++ b/core/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java @@ -154,13 +154,12 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import java.util.function.LongSupplier; import java.util.function.Supplier; -import java.util.stream.Collectors; import static java.util.Collections.emptyMap; import static org.elasticsearch.index.engine.Engine.Operation.Origin.LOCAL_TRANSLOG_RECOVERY; +import static org.elasticsearch.index.engine.Engine.Operation.Origin.PEER_RECOVERY; import static org.elasticsearch.index.engine.Engine.Operation.Origin.PRIMARY; import static org.elasticsearch.index.engine.Engine.Operation.Origin.REPLICA; -import static org.elasticsearch.index.engine.Engine.Operation.Origin.PEER_RECOVERY; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; @@ -1694,8 +1693,10 @@ public class InternalEngineTests extends ESTestCase { } } - replicaLocalCheckpoint = - rarely() ? replicaLocalCheckpoint : randomIntBetween(Math.toIntExact(replicaLocalCheckpoint), Math.toIntExact(primarySeqNo)); + if (randomInt(10) < 3) { + // only update rarely as we do it every doc + replicaLocalCheckpoint = randomIntBetween(Math.toIntExact(replicaLocalCheckpoint), Math.toIntExact(primarySeqNo)); + } initialEngine.seqNoService().updateLocalCheckpointForShard("primary", initialEngine.seqNoService().getLocalCheckpoint()); initialEngine.seqNoService().updateLocalCheckpointForShard("replica", replicaLocalCheckpoint); @@ -1707,6 +1708,7 @@ public class InternalEngineTests extends ESTestCase { } } + logger.info("localcheckpoint {}, global {}", replicaLocalCheckpoint, primarySeqNo); initialEngine.seqNoService().updateGlobalCheckpointOnPrimary(); globalCheckpoint = initialEngine.seqNoService().getGlobalCheckpoint();