diff --git a/server/src/main/java/org/opensearch/cluster/coordination/CoordinationState.java b/server/src/main/java/org/opensearch/cluster/coordination/CoordinationState.java index bb156adb40f30..08685a2c07538 100644 --- a/server/src/main/java/org/opensearch/cluster/coordination/CoordinationState.java +++ b/server/src/main/java/org/opensearch/cluster/coordination/CoordinationState.java @@ -463,10 +463,7 @@ public PublishResponse handlePublishRequest(PublishRequest publishRequest) { persistedStateRegistry.getPersistedState(PersistedStateType.LOCAL).setLastAcceptedState(clusterState); // if Remote publication is enabled, we only need to update the accepted state in followers node as elected cluster manager would // have already updated the last accepted state - if (isRemotePublicationEnabled - && publishRequest.getManifest() != null - && localNode.isClusterManagerNode() - && clusterState.getNodes().isLocalNodeElectedClusterManager() == false) { + if (shouldUpdateRemotePersistedState(publishRequest)) { persistedStateRegistry.getPersistedState(PersistedStateType.REMOTE).setLastAcceptedState(clusterState); ((GatewayMetaState.RemotePersistedState) persistedStateRegistry.getPersistedState(PersistedStateType.REMOTE)) .setLastAcceptedManifest(publishRequest.getManifest()); @@ -631,6 +628,14 @@ public void close() throws IOException { IOUtils.close(persistedStateRegistry); } + private boolean shouldUpdateRemotePersistedState(PublishRequest publishRequest) { + return isRemotePublicationEnabled + && publishRequest.getManifest() != null + && localNode.isClusterManagerNode() + && publishRequest.getAcceptedState().getNodes().isLocalNodeElectedClusterManager() == false + && persistedStateRegistry.getPersistedState(PersistedStateType.REMOTE) != null; + } + /** * Pluggable persistence layer for {@link CoordinationState}. * diff --git a/server/src/test/java/org/opensearch/gateway/remote/RemoteClusterStateServiceTests.java b/server/src/test/java/org/opensearch/gateway/remote/RemoteClusterStateServiceTests.java index 3fe5957622448..53742556f0594 100644 --- a/server/src/test/java/org/opensearch/gateway/remote/RemoteClusterStateServiceTests.java +++ b/server/src/test/java/org/opensearch/gateway/remote/RemoteClusterStateServiceTests.java @@ -574,7 +574,7 @@ public void testFailWriteIncrementalMetadataNonClusterManagerNode() throws IOExc final RemoteClusterStateManifestInfo manifestDetails = remoteClusterStateService.writeIncrementalMetadata( clusterState, clusterState, - null + ClusterMetadataManifest.builder().build() ); Assert.assertThat(manifestDetails, nullValue()); assertEquals(0, remoteClusterStateService.getStats().getSuccessCount());