diff --git a/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationState.java b/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationState.java index 9eb16d88043b2..cb3e5ac8edfd2 100644 --- a/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationState.java +++ b/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationState.java @@ -556,18 +556,27 @@ public interface PersistedState extends Closeable { * marked as committed. */ default void markLastAcceptedStateAsCommitted() { - final var lastAcceptedState = getLastAcceptedState(); - final var hasClusterUuid = lastAcceptedState.metadata().clusterUUID().equals(Metadata.UNKNOWN_CLUSTER_UUID) == false; - assert hasClusterUuid : "received cluster state with empty cluster uuid: " + lastAcceptedState; - - if (hasClusterUuid && lastAcceptedState.metadata().clusterUUIDCommitted() == false) { + final ClusterState lastAcceptedState = getLastAcceptedState(); + Metadata.Builder metadataBuilder = null; + if (lastAcceptedState.getLastAcceptedConfiguration().equals(lastAcceptedState.getLastCommittedConfiguration()) == false) { + final CoordinationMetadata coordinationMetadata = CoordinationMetadata.builder(lastAcceptedState.coordinationMetadata()) + .lastCommittedConfiguration(lastAcceptedState.getLastAcceptedConfiguration()) + .build(); + metadataBuilder = Metadata.builder(lastAcceptedState.metadata()); + metadataBuilder.coordinationMetadata(coordinationMetadata); + } + assert lastAcceptedState.metadata().clusterUUID().equals(Metadata.UNKNOWN_CLUSTER_UUID) == false + : "received cluster state with empty cluster uuid: " + lastAcceptedState; + if (lastAcceptedState.metadata().clusterUUID().equals(Metadata.UNKNOWN_CLUSTER_UUID) == false + && lastAcceptedState.metadata().clusterUUIDCommitted() == false) { + if (metadataBuilder == null) { + metadataBuilder = Metadata.builder(lastAcceptedState.metadata()); + } + metadataBuilder.clusterUUIDCommitted(true); logger.info("cluster UUID set to [{}]", lastAcceptedState.metadata().clusterUUID()); } - - final var adjustedMetadata = lastAcceptedState.metadata() - .withLastCommittedValues(hasClusterUuid, lastAcceptedState.getLastAcceptedConfiguration()); - if (adjustedMetadata != lastAcceptedState.metadata()) { - setLastAcceptedState(ClusterState.builder(lastAcceptedState).metadata(adjustedMetadata).build()); + if (metadataBuilder != null) { + setLastAcceptedState(ClusterState.builder(lastAcceptedState).metadata(metadataBuilder).build()); } }