From 5f89bbcdc3a1f745e685ddc26b26d2fd8c8fd46c Mon Sep 17 00:00:00 2001 From: bansvaru Date: Wed, 6 Sep 2023 19:54:38 +0530 Subject: [PATCH] optimize the validation checks for restore flow Signed-off-by: bansvaru --- .../recovery/RemoteStoreRestoreService.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/org/opensearch/index/recovery/RemoteStoreRestoreService.java b/server/src/main/java/org/opensearch/index/recovery/RemoteStoreRestoreService.java index 0f0a6404fac58..5cdff14cae360 100644 --- a/server/src/main/java/org/opensearch/index/recovery/RemoteStoreRestoreService.java +++ b/server/src/main/java/org/opensearch/index/recovery/RemoteStoreRestoreService.java @@ -249,19 +249,6 @@ private void validate( ) throws IllegalStateException, IllegalArgumentException { String errorMsg = "cannot restore index [%s] because an open index with same name/uuid already exists in the cluster."; - Set graveyardIndexNames = new HashSet<>(); - Set graveyardIndexUUID = new HashSet<>(); - Set liveClusterIndexUUIDs = currentState.metadata() - .indices() - .values() - .stream() - .map(IndexMetadata::getIndexUUID) - .collect(Collectors.toSet()); - - currentState.metadata().indexGraveyard().getTombstones().forEach(tombstone -> { - graveyardIndexNames.add(tombstone.getIndex().getName()); - graveyardIndexUUID.add(tombstone.getIndex().getUUID()); - }); // Restore with current cluster UUID will fail as same indices would be present in the cluster which we are trying to // restore if (currentState.metadata().clusterUUID().equals(restoreClusterUUID)) { @@ -274,6 +261,19 @@ private void validate( boolean metadataFromRemoteStore = indexMetadataEntry.getValue().v1(); if (indexMetadata.getSettings().getAsBoolean(SETTING_REMOTE_STORE_ENABLED, false)) { if (metadataFromRemoteStore) { + Set graveyardIndexNames = new HashSet<>(); + Set graveyardIndexUUID = new HashSet<>(); + Set liveClusterIndexUUIDs = currentState.metadata() + .indices() + .values() + .stream() + .map(IndexMetadata::getIndexUUID) + .collect(Collectors.toSet()); + + currentState.metadata().indexGraveyard().getTombstones().forEach(tombstone -> { + graveyardIndexNames.add(tombstone.getIndex().getName()); + graveyardIndexUUID.add(tombstone.getIndex().getUUID()); + }); // Since updates to graveyard are synced to remote we should neven land in a situation where remote contain index // metadata for graveyard index. @@ -303,7 +303,6 @@ private void validate( boolean isHidden = IndexMetadata.INDEX_HIDDEN_SETTING.get(indexMetadata.getSettings()); createIndexService.validateIndexName(indexName, currentState); createIndexService.validateDotIndex(indexName, isHidden); - createIndexService.validateIndexSettings(indexName, indexMetadata.getSettings(), false); shardLimitValidator.validateShardLimit(indexName, indexMetadata.getSettings(), currentState); } else if (restoreAllShards && IndexMetadata.State.CLOSE.equals(indexMetadata.getState()) == false) { throw new IllegalStateException(String.format(Locale.ROOT, errorMsg, indexName) + " Close the existing index.");