diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java index 77ea513099e42..c0e4b4962a796 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java @@ -8,6 +8,8 @@ package org.elasticsearch.cluster.metadata; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.elasticsearch.Version; import org.elasticsearch.action.admin.indices.rollover.RolloverInfo; import org.elasticsearch.action.support.ActiveShardCount; @@ -83,6 +85,8 @@ public class IndexMetadata implements Diffable, ToXContentFragment { + private static final Logger logger = LogManager.getLogger(IndexMetadata.class); + public static final ClusterBlock INDEX_READ_ONLY_BLOCK = new ClusterBlock( 5, "index read-only (api)", @@ -1589,7 +1593,7 @@ public IndexMetadata apply(IndexMetadata part) { builder.stats(stats); builder.indexWriteLoadForecast(indexWriteLoadForecast); builder.shardSizeInBytesForecast(shardSizeInBytesForecast); - return builder.build(); + return builder.build(true); } } @@ -1656,7 +1660,7 @@ public static IndexMetadata readFrom(StreamInput in, @Nullable Function IndexMetadata.builder("index") - .settings(Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)) - .numberOfShards(1) - .numberOfReplicas(0) - .putAlias(AliasMetadata.builder("index").build()) - .build() - ); - assertEquals("alias name [index] self-conflicts with index name", iae.getMessage()); + { + final IllegalArgumentException iae = expectThrows( + IllegalArgumentException.class, + () -> IndexMetadata.builder("index") + .settings(Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)) + .numberOfShards(1) + .numberOfReplicas(0) + .putAlias(AliasMetadata.builder("index").build()) + .build(randomBoolean()) + ); + assertEquals("alias name [index] self-conflicts with index name", iae.getMessage()); + } + { + final IllegalArgumentException iae = expectThrows( + IllegalArgumentException.class, + () -> IndexMetadata.builder("index") + .settings(Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.V_8_5_0)) + .numberOfShards(1) + .numberOfReplicas(0) + .putAlias(AliasMetadata.builder("index").build()) + .build(false) + ); + assertEquals("alias name [index] self-conflicts with index name", iae.getMessage()); + } + } + + public void testRepairIndexAndAliasWithSameName() { + final IndexMetadata indexMetadata = IndexMetadata.builder("index") + .settings(Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, Version.V_8_5_0)) + .numberOfShards(1) + .numberOfReplicas(0) + .putAlias(AliasMetadata.builder("index").build()) + .build(true); + assertThat(indexMetadata.getAliases(), hasKey("index-alias-corrupted-by-8-5")); } private static Settings indexSettingsWithDataTier(String dataTier) {