diff --git a/server/src/main/java/org/elasticsearch/gateway/GatewayMetaState.java b/server/src/main/java/org/elasticsearch/gateway/GatewayMetaState.java index 82fea02386890..20a5225379f06 100644 --- a/server/src/main/java/org/elasticsearch/gateway/GatewayMetaState.java +++ b/server/src/main/java/org/elasticsearch/gateway/GatewayMetaState.java @@ -455,7 +455,7 @@ public void setCurrentTerm(long currentTerm) { getWriterSafe().writeFullStateAndCommit(currentTerm, lastAcceptedState); writeNextStateFully = false; } else { - getWriterSafe().commit(currentTerm, lastAcceptedState.version()); + getWriterSafe().writeIncrementalTermUpdateAndCommit(currentTerm, lastAcceptedState.version()); } } catch (Exception e) { handleExceptionOnWrite(e); diff --git a/server/src/main/java/org/elasticsearch/gateway/PersistedClusterStateService.java b/server/src/main/java/org/elasticsearch/gateway/PersistedClusterStateService.java index 06e5e76ca494e..1b5bb0ac8c0d6 100644 --- a/server/src/main/java/org/elasticsearch/gateway/PersistedClusterStateService.java +++ b/server/src/main/java/org/elasticsearch/gateway/PersistedClusterStateService.java @@ -609,7 +609,8 @@ public void writeFullStateAndCommit(long currentTerm, ClusterState clusterState) void writeIncrementalStateAndCommit(long currentTerm, ClusterState previousClusterState, ClusterState clusterState) throws IOException { ensureOpen(); - assert fullStateWritten : "Need to write full state first before doing incremental writes"; + ensureFullStateWritten(); + try { final long startTimeMillis = relativeTimeMillisSupplier.getAsLong(); final WriterStats stats = updateMetadata(previousClusterState.metadata(), clusterState.metadata()); @@ -631,6 +632,15 @@ void writeIncrementalStateAndCommit(long currentTerm, ClusterState previousClust } } + private void ensureFullStateWritten() { + assert fullStateWritten : "Need to write full state first before doing incremental writes"; + //noinspection ConstantConditions to catch this even if assertions are disabled + if (fullStateWritten == false) { + logger.error("cannot write incremental state"); + throw new IllegalStateException("cannot write incremental state"); + } + } + /** * Update the persisted metadata to match the given cluster state by removing any stale or unnecessary documents and adding any * updated documents. @@ -730,7 +740,13 @@ private WriterStats addMetadata(Metadata metadata) throws IOException { return new WriterStats(true, metadata.indices().size(), 0); } - public void commit(long currentTerm, long lastAcceptedVersion) throws IOException { + public void writeIncrementalTermUpdateAndCommit(long currentTerm, long lastAcceptedVersion) throws IOException { + ensureOpen(); + ensureFullStateWritten(); + commit(currentTerm, lastAcceptedVersion); + } + + void commit(long currentTerm, long lastAcceptedVersion) throws IOException { ensureOpen(); try { for (MetadataIndexWriter metadataIndexWriter : metadataIndexWriters) {