From 8d417330b15aea623d7790c5e32646dead43a9da Mon Sep 17 00:00:00 2001 From: bansvaru Date: Thu, 19 Oct 2023 21:07:40 +0530 Subject: [PATCH] Override local disk state if we are able to restore from remote Signed-off-by: bansvaru --- .../org/opensearch/gateway/GatewayMetaState.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/opensearch/gateway/GatewayMetaState.java b/server/src/main/java/org/opensearch/gateway/GatewayMetaState.java index 9eb7fb0ca04d0..1e56bc8bd0e30 100644 --- a/server/src/main/java/org/opensearch/gateway/GatewayMetaState.java +++ b/server/src/main/java/org/opensearch/gateway/GatewayMetaState.java @@ -160,15 +160,15 @@ public void start( try { ClusterState clusterState = ClusterState.builder(ClusterName.CLUSTER_NAME_SETTING.get(settings)) .version(lastAcceptedVersion) - .metadata(metadata) .build(); + boolean isRemoteStateRestored = false; if (DiscoveryNode.isClusterManagerNode(settings) && isRemoteStoreClusterStateEnabled(settings)) { + String lastKnownClusterUUID = ClusterState.UNKNOWN_UUID; // If the cluster UUID loaded from local is unknown (_na_) then fetch the best state from remote // If there is no valid state on remote, continue with initial empty state // If there is a valid state, then restore index metadata using this state - String lastKnownClusterUUID = ClusterState.UNKNOWN_UUID; - if (ClusterState.UNKNOWN_UUID.equals(clusterState.metadata().clusterUUID())) { + if (ClusterState.UNKNOWN_UUID.equals(metadata.clusterUUID())) { lastKnownClusterUUID = remoteClusterStateService.getLastKnownUUIDFromRemote( clusterState.getClusterName().value() ); @@ -181,15 +181,21 @@ public void start( new String[] {} ); clusterState = remoteRestoreResult.getClusterState(); + isRemoteStateRestored = true; } } remotePersistedState = new RemotePersistedState(remoteClusterStateService, lastKnownClusterUUID); } + if (isRemoteStateRestored == false) { + clusterState = ClusterState.builder(clusterState).metadata(metadata).build(); + } + // Recovers Cluster and Index level blocks clusterState = prepareInitialClusterState( transportService, clusterService, + // if we did not restore from remote, apply the local disk state. ClusterState.builder(clusterState) .metadata(upgradeMetadataForNode(clusterState.metadata(), metadataIndexUpgradeService, metadataUpgrader)) .build()