浏览代码

A few Metadata cleanups (#80850)

Joe Gallo 3 年之前
父节点
当前提交
8c68d7c830
共有 17 个文件被更改,包括 81 次插入83 次删除
  1. 2 2
      server/src/main/java/org/elasticsearch/action/admin/indices/alias/TransportIndicesAliasesAction.java
  2. 1 1
      server/src/main/java/org/elasticsearch/action/admin/indices/alias/get/TransportGetAliasesAction.java
  3. 1 1
      server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java
  4. 1 1
      server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java
  5. 7 22
      server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java
  6. 6 6
      server/src/test/java/org/elasticsearch/action/admin/indices/alias/get/TransportGetAliasesActionTests.java
  7. 1 1
      server/src/test/java/org/elasticsearch/cluster/metadata/DataStreamActionTests.java
  8. 1 1
      server/src/test/java/org/elasticsearch/cluster/metadata/IndexTemplateMetadataTests.java
  9. 37 16
      server/src/test/java/org/elasticsearch/cluster/metadata/MetadataDeleteIndexServiceTests.java
  10. 5 5
      server/src/test/java/org/elasticsearch/cluster/metadata/MetadataIndexTemplateServiceTests.java
  11. 11 14
      server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java
  12. 2 2
      server/src/test/java/org/elasticsearch/cluster/metadata/TemplateUpgradeServiceTests.java
  13. 1 1
      x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/annotations/AnnotationIndex.java
  14. 1 5
      x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/utils/MlIndexAndAlias.java
  15. 2 3
      x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichPolicyRunner.java
  16. 1 1
      x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/TransformClusterStateListener.java
  17. 1 1
      x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/persistence/TransformInternalIndex.java

+ 2 - 2
server/src/main/java/org/elasticsearch/action/admin/indices/alias/TransportIndicesAliasesAction.java

@@ -244,8 +244,8 @@ public class TransportIndicesAliasesAction extends AcknowledgedTransportMasterNo
     private static String[] concreteAliases(AliasActions action, Metadata metadata, String concreteIndex) {
     private static String[] concreteAliases(AliasActions action, Metadata metadata, String concreteIndex) {
         if (action.expandAliasesWildcards()) {
         if (action.expandAliasesWildcards()) {
             // for DELETE we expand the aliases
             // for DELETE we expand the aliases
-            String[] indexAsArray = { concreteIndex };
-            ImmutableOpenMap<String, List<AliasMetadata>> aliasMetadata = metadata.findAliases(action, indexAsArray);
+            String[] concreteIndices = { concreteIndex };
+            ImmutableOpenMap<String, List<AliasMetadata>> aliasMetadata = metadata.findAliases(action.aliases(), concreteIndices);
             List<String> finalAliases = new ArrayList<>();
             List<String> finalAliases = new ArrayList<>();
             for (List<AliasMetadata> aliases : aliasMetadata.values()) {
             for (List<AliasMetadata> aliases : aliasMetadata.values()) {
                 for (AliasMetadata aliasMeta : aliases) {
                 for (AliasMetadata aliasMeta : aliases) {

+ 1 - 1
server/src/main/java/org/elasticsearch/action/admin/indices/alias/get/TransportGetAliasesAction.java

@@ -84,7 +84,7 @@ public class TransportGetAliasesAction extends TransportMasterNodeReadAction<Get
         // resolve all concrete indices upfront and warn/error later
         // resolve all concrete indices upfront and warn/error later
         final String[] concreteIndices = indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(state, request);
         final String[] concreteIndices = indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(state, request);
         final SystemIndexAccessLevel systemIndexAccessLevel = indexNameExpressionResolver.getSystemIndexAccessLevel();
         final SystemIndexAccessLevel systemIndexAccessLevel = indexNameExpressionResolver.getSystemIndexAccessLevel();
-        ImmutableOpenMap<String, List<AliasMetadata>> aliases = state.metadata().findAliases(request, concreteIndices);
+        ImmutableOpenMap<String, List<AliasMetadata>> aliases = state.metadata().findAliases(request.aliases(), concreteIndices);
         listener.onResponse(
         listener.onResponse(
             new GetAliasesResponse(
             new GetAliasesResponse(
                 postProcess(request, concreteIndices, aliases, state, systemIndexAccessLevel, threadPool.getThreadContext(), systemIndices),
                 postProcess(request, concreteIndices, aliases, state, systemIndexAccessLevel, threadPool.getThreadContext(), systemIndices),

+ 1 - 1
server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java

@@ -229,7 +229,7 @@ public final class DataStream extends AbstractDiffable<DataStream> implements To
         long currentTimeMillis = timeProvider.getAsLong();
         long currentTimeMillis = timeProvider.getAsLong();
         do {
         do {
             newWriteIndexName = DataStream.getDefaultBackingIndexName(getName(), ++generation, currentTimeMillis);
             newWriteIndexName = DataStream.getDefaultBackingIndexName(getName(), ++generation, currentTimeMillis);
-        } while (clusterMetadata.getIndicesLookup().containsKey(newWriteIndexName));
+        } while (clusterMetadata.hasIndexAbstraction(newWriteIndexName));
         return Tuple.tuple(newWriteIndexName, generation);
         return Tuple.tuple(newWriteIndexName, generation);
     }
     }
 
 

+ 1 - 1
server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java

@@ -591,7 +591,7 @@ public class IndexNameExpressionResolver {
      */
      */
     public boolean hasIndexAbstraction(String indexAbstraction, ClusterState state) {
     public boolean hasIndexAbstraction(String indexAbstraction, ClusterState state) {
         String resolvedAliasOrIndex = DateMathExpressionResolver.resolveExpression(indexAbstraction);
         String resolvedAliasOrIndex = DateMathExpressionResolver.resolveExpression(indexAbstraction);
-        return state.metadata().getIndicesLookup().containsKey(resolvedAliasOrIndex);
+        return state.metadata().hasIndexAbstraction(resolvedAliasOrIndex);
     }
     }
 
 
     /**
     /**

+ 7 - 22
server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java

@@ -17,7 +17,6 @@ import org.apache.logging.log4j.Logger;
 import org.apache.lucene.util.CollectionUtil;
 import org.apache.lucene.util.CollectionUtil;
 import org.elasticsearch.ResourceNotFoundException;
 import org.elasticsearch.ResourceNotFoundException;
 import org.elasticsearch.Version;
 import org.elasticsearch.Version;
-import org.elasticsearch.action.AliasesRequest;
 import org.elasticsearch.cluster.ClusterState;
 import org.elasticsearch.cluster.ClusterState;
 import org.elasticsearch.cluster.Diff;
 import org.elasticsearch.cluster.Diff;
 import org.elasticsearch.cluster.Diffable;
 import org.elasticsearch.cluster.Diffable;
@@ -355,11 +354,10 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
     }
     }
 
 
     public SortedMap<String, IndexAbstraction> getIndicesLookup() {
     public SortedMap<String, IndexAbstraction> getIndicesLookup() {
-        if (indicesLookup != null) {
-            return indicesLookup;
+        if (indicesLookup == null) {
+            DataStreamMetadata dataStreamMetadata = custom(DataStreamMetadata.TYPE);
+            indicesLookup = Builder.buildIndicesLookup(dataStreamMetadata, indices);
         }
         }
-        DataStreamMetadata dataStreamMetadata = custom(DataStreamMetadata.TYPE);
-        indicesLookup = Collections.unmodifiableSortedMap(Builder.buildIndicesLookup(dataStreamMetadata, indices));
         return indicesLookup;
         return indicesLookup;
     }
     }
 
 
@@ -375,19 +373,6 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
         return findAliases(Strings.EMPTY_ARRAY, concreteIndices);
         return findAliases(Strings.EMPTY_ARRAY, concreteIndices);
     }
     }
 
 
-    /**
-     * Finds the specific index aliases that match with the specified aliases directly or partially via wildcards, and
-     * that point to the specified concrete indices (directly or matching indices via wildcards).
-     *
-     * @param aliasesRequest The request to find aliases for
-     * @param concreteIndices The concrete indices that the aliases must point to in order to be returned.
-     * @return A map of index name to the list of aliases metadata. If a concrete index does not have matching
-     * aliases then the result will <b>not</b> include the index's key.
-     */
-    public ImmutableOpenMap<String, List<AliasMetadata>> findAliases(final AliasesRequest aliasesRequest, final String[] concreteIndices) {
-        return findAliases(aliasesRequest.aliases(), concreteIndices);
-    }
-
     /**
     /**
      * Finds the specific index aliases that match with the specified aliases directly or partially via wildcards, and
      * Finds the specific index aliases that match with the specified aliases directly or partially via wildcards, and
      * that point to the specified concrete indices (directly or matching indices via wildcards).
      * that point to the specified concrete indices (directly or matching indices via wildcards).
@@ -397,7 +382,7 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
      * @return A map of index name to the list of aliases metadata. If a concrete index does not have matching
      * @return A map of index name to the list of aliases metadata. If a concrete index does not have matching
      * aliases then the result will <b>not</b> include the index's key.
      * aliases then the result will <b>not</b> include the index's key.
      */
      */
-    private ImmutableOpenMap<String, List<AliasMetadata>> findAliases(final String[] aliases, final String[] concreteIndices) {
+    public ImmutableOpenMap<String, List<AliasMetadata>> findAliases(final String[] aliases, final String[] concreteIndices) {
         assert aliases != null;
         assert aliases != null;
         assert concreteIndices != null;
         assert concreteIndices != null;
         if (concreteIndices.length == 0) {
         if (concreteIndices.length == 0) {
@@ -785,7 +770,7 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
     }
     }
 
 
     public ImmutableOpenMap<String, IndexTemplateMetadata> getTemplates() {
     public ImmutableOpenMap<String, IndexTemplateMetadata> getTemplates() {
-        return this.templates;
+        return templates();
     }
     }
 
 
     public Map<String, ComponentTemplate> componentTemplates() {
     public Map<String, ComponentTemplate> componentTemplates() {
@@ -1646,7 +1631,7 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
                 indicesLookup = previousIndicesLookup;
                 indicesLookup = previousIndicesLookup;
             } else {
             } else {
                 if (builtIndicesLookupEagerly) {
                 if (builtIndicesLookupEagerly) {
-                    indicesLookup = Collections.unmodifiableSortedMap(buildIndicesLookup(dataStreamMetadata, indices));
+                    indicesLookup = buildIndicesLookup(dataStreamMetadata, indices);
                 } else {
                 } else {
                     indicesLookup = null;
                     indicesLookup = null;
                 }
                 }
@@ -1771,7 +1756,7 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
             }
             }
 
 
             validateDataStreams(indicesLookup, dataStreamMetadata);
             validateDataStreams(indicesLookup, dataStreamMetadata);
-            return indicesLookup;
+            return Collections.unmodifiableSortedMap(indicesLookup);
         }
         }
 
 
         static void validateDataStreams(SortedMap<String, IndexAbstraction> indicesLookup, @Nullable DataStreamMetadata dsMetadata) {
         static void validateDataStreams(SortedMap<String, IndexAbstraction> indicesLookup, @Nullable DataStreamMetadata dsMetadata) {

+ 6 - 6
server/src/test/java/org/elasticsearch/action/admin/indices/alias/get/TransportGetAliasesActionTests.java

@@ -106,7 +106,7 @@ public class TransportGetAliasesActionTests extends ESTestCase {
             .fPut("c", Collections.singletonList(new AliasMetadata.Builder("d").build()))
             .fPut("c", Collections.singletonList(new AliasMetadata.Builder("d").build()))
             .build();
             .build();
         final String[] concreteIndices = { "a", ".b", "c" };
         final String[] concreteIndices = { "a", ".b", "c" };
-        assertEquals(state.metadata().findAliases(request, concreteIndices), aliases);
+        assertEquals(state.metadata().findAliases(request.aliases(), concreteIndices), aliases);
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
             request,
             request,
             concreteIndices,
             concreteIndices,
@@ -139,7 +139,7 @@ public class TransportGetAliasesActionTests extends ESTestCase {
             .fPut(".b", Collections.singletonList(new AliasMetadata.Builder(".y").build()))
             .fPut(".b", Collections.singletonList(new AliasMetadata.Builder(".y").build()))
             .build();
             .build();
         final String[] concreteIndices = { ".b" };
         final String[] concreteIndices = { ".b" };
-        assertEquals(state.metadata().findAliases(request, concreteIndices), aliases);
+        assertEquals(state.metadata().findAliases(request.aliases(), concreteIndices), aliases);
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
             request,
             request,
             concreteIndices,
             concreteIndices,
@@ -169,7 +169,7 @@ public class TransportGetAliasesActionTests extends ESTestCase {
             .fPut(".b", Collections.singletonList(new AliasMetadata.Builder(".y").build()))
             .fPut(".b", Collections.singletonList(new AliasMetadata.Builder(".y").build()))
             .build();
             .build();
         final String[] concreteIndices = { "a", ".b", "c" };
         final String[] concreteIndices = { "a", ".b", "c" };
-        assertEquals(state.metadata().findAliases(request, concreteIndices), aliases);
+        assertEquals(state.metadata().findAliases(request.aliases(), concreteIndices), aliases);
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
             request,
             request,
             concreteIndices,
             concreteIndices,
@@ -199,7 +199,7 @@ public class TransportGetAliasesActionTests extends ESTestCase {
             .fPut(".b", Collections.singletonList(new AliasMetadata.Builder(".y").build()))
             .fPut(".b", Collections.singletonList(new AliasMetadata.Builder(".y").build()))
             .build();
             .build();
         final String[] concreteIndices = { "a", ".b", "c" };
         final String[] concreteIndices = { "a", ".b", "c" };
-        assertEquals(state.metadata().findAliases(request, concreteIndices), aliases);
+        assertEquals(state.metadata().findAliases(request.aliases(), concreteIndices), aliases);
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
             request,
             request,
             concreteIndices,
             concreteIndices,
@@ -225,7 +225,7 @@ public class TransportGetAliasesActionTests extends ESTestCase {
             .fPut("c", Collections.singletonList(new AliasMetadata.Builder("d").build()))
             .fPut("c", Collections.singletonList(new AliasMetadata.Builder("d").build()))
             .build();
             .build();
         final String[] concreteIndices = { "c" };
         final String[] concreteIndices = { "c" };
-        assertEquals(state.metadata().findAliases(request, concreteIndices), aliases);
+        assertEquals(state.metadata().findAliases(request.aliases(), concreteIndices), aliases);
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
             request,
             request,
             concreteIndices,
             concreteIndices,
@@ -255,7 +255,7 @@ public class TransportGetAliasesActionTests extends ESTestCase {
         GetAliasesRequest request = new GetAliasesRequest(".y");
         GetAliasesRequest request = new GetAliasesRequest(".y");
         ImmutableOpenMap<String, List<AliasMetadata>> aliases = ImmutableOpenMap.<String, List<AliasMetadata>>builder().build();
         ImmutableOpenMap<String, List<AliasMetadata>> aliases = ImmutableOpenMap.<String, List<AliasMetadata>>builder().build();
         final String[] concreteIndices = {};
         final String[] concreteIndices = {};
-        assertEquals(state.metadata().findAliases(request, concreteIndices), aliases);
+        assertEquals(state.metadata().findAliases(request.aliases(), concreteIndices), aliases);
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
         ImmutableOpenMap<String, List<AliasMetadata>> result = TransportGetAliasesAction.postProcess(
             request,
             request,
             concreteIndices,
             concreteIndices,

+ 1 - 1
server/src/test/java/org/elasticsearch/cluster/metadata/DataStreamActionTests.java

@@ -16,7 +16,7 @@ import org.elasticsearch.xcontent.XContentType;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 
-import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.Matchers.equalTo;
 
 
 public class DataStreamActionTests extends ESTestCase {
 public class DataStreamActionTests extends ESTestCase {
 
 

+ 1 - 1
server/src/test/java/org/elasticsearch/cluster/metadata/IndexTemplateMetadataTests.java

@@ -24,8 +24,8 @@ import org.elasticsearch.xcontent.json.JsonXContent;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Collections;
 
 
-import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.equalTo;
 
 
 public class IndexTemplateMetadataTests extends ESTestCase {
 public class IndexTemplateMetadataTests extends ESTestCase {
 
 

+ 37 - 16
server/src/test/java/org/elasticsearch/cluster/metadata/MetadataDeleteIndexServiceTests.java

@@ -25,21 +25,21 @@ import org.elasticsearch.snapshots.SnapshotInProgressException;
 import org.elasticsearch.snapshots.SnapshotInfoTestUtils;
 import org.elasticsearch.snapshots.SnapshotInfoTestUtils;
 import org.elasticsearch.test.ESTestCase;
 import org.elasticsearch.test.ESTestCase;
 import org.elasticsearch.test.VersionUtils;
 import org.elasticsearch.test.VersionUtils;
-import org.hamcrest.core.IsNull;
 import org.junit.Before;
 import org.junit.Before;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Locale;
 import java.util.Locale;
+import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.IntStream;
 
 
-import static java.util.Collections.singleton;
-import static java.util.Collections.singletonMap;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.nullValue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verify;
@@ -63,7 +63,7 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
     public void testDeleteMissing() {
     public void testDeleteMissing() {
         Index index = new Index("missing", "doesn't matter");
         Index index = new Index("missing", "doesn't matter");
         ClusterState state = ClusterState.builder(ClusterName.DEFAULT).build();
         ClusterState state = ClusterState.builder(ClusterName.DEFAULT).build();
-        IndexNotFoundException e = expectThrows(IndexNotFoundException.class, () -> service.deleteIndices(state, singleton(index)));
+        IndexNotFoundException e = expectThrows(IndexNotFoundException.class, () -> service.deleteIndices(state, Set.of(index)));
         assertEquals(index, e.getIndex());
         assertEquals(index, e.getIndex());
     }
     }
 
 
@@ -76,7 +76,7 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
                 true,
                 true,
                 false,
                 false,
                 SnapshotsInProgress.State.INIT,
                 SnapshotsInProgress.State.INIT,
-                singletonMap(index, new IndexId(index, "doesn't matter")),
+                Map.of(index, new IndexId(index, "doesn't matter")),
                 Collections.emptyList(),
                 Collections.emptyList(),
                 Collections.emptyList(),
                 Collections.emptyList(),
                 System.currentTimeMillis(),
                 System.currentTimeMillis(),
@@ -90,7 +90,7 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
         ClusterState state = ClusterState.builder(clusterState(index)).putCustom(SnapshotsInProgress.TYPE, snaps).build();
         ClusterState state = ClusterState.builder(clusterState(index)).putCustom(SnapshotsInProgress.TYPE, snaps).build();
         Exception e = expectThrows(
         Exception e = expectThrows(
             SnapshotInProgressException.class,
             SnapshotInProgressException.class,
-            () -> service.deleteIndices(state, singleton(state.metadata().getIndices().get(index).getIndex()))
+            () -> service.deleteIndices(state, Set.of(state.metadata().getIndices().get(index).getIndex()))
         );
         );
         assertEquals(
         assertEquals(
             "Cannot delete indices that are being snapshotted: [["
             "Cannot delete indices that are being snapshotted: [["
@@ -110,7 +110,7 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
         when(allocationService.reroute(any(ClusterState.class), any(String.class))).then(i -> i.getArguments()[0]);
         when(allocationService.reroute(any(ClusterState.class), any(String.class))).then(i -> i.getArguments()[0]);
 
 
         // Remove it
         // Remove it
-        ClusterState after = service.deleteIndices(before, singleton(before.metadata().getIndices().get(index).getIndex()));
+        ClusterState after = service.deleteIndices(before, Set.of(before.metadata().getIndices().get(index).getIndex()));
 
 
         // It is gone
         // It is gone
         assertNull(after.metadata().getIndices().get(index));
         assertNull(after.metadata().getIndices().get(index));
@@ -121,6 +121,30 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
         verify(allocationService).reroute(any(ClusterState.class), any(String.class));
         verify(allocationService).reroute(any(ClusterState.class), any(String.class));
     }
     }
 
 
+    public void testDeleteIndexWithAnAlias() {
+        String index = randomAlphaOfLength(5);
+        String alias = randomAlphaOfLength(5);
+
+        IndexMetadata idxMetadata = IndexMetadata.builder(index)
+            .settings(Settings.builder().put("index.version.created", VersionUtils.randomVersion(random())))
+            .putAlias(AliasMetadata.builder(alias).writeIndex(true).build())
+            .numberOfShards(1)
+            .numberOfReplicas(1)
+            .build();
+        ClusterState before = ClusterState.builder(ClusterName.DEFAULT)
+            .metadata(Metadata.builder().put(idxMetadata, false))
+            .routingTable(RoutingTable.builder().addAsNew(idxMetadata).build())
+            .blocks(ClusterBlocks.builder().addBlocks(idxMetadata))
+            .build();
+
+        ClusterState after = service.deleteIndices(before, Set.of(before.metadata().getIndices().get(index).getIndex()));
+
+        assertNull(after.metadata().getIndices().get(index));
+        assertNull(after.routingTable().index(index));
+        assertNull(after.blocks().indices().get(index));
+        assertNull(after.metadata().getIndicesLookup().get(alias));
+    }
+
     public void testDeleteBackingIndexForDataStream() {
     public void testDeleteBackingIndexForDataStream() {
         int numBackingIndices = randomIntBetween(2, 5);
         int numBackingIndices = randomIntBetween(2, 5);
         String dataStreamName = randomAlphaOfLength(6).toLowerCase(Locale.ROOT);
         String dataStreamName = randomAlphaOfLength(6).toLowerCase(Locale.ROOT);
@@ -134,12 +158,9 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
         Index indexToDelete = before.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, numIndexToDelete)).getIndex();
         Index indexToDelete = before.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, numIndexToDelete)).getIndex();
         ClusterState after = service.deleteIndices(before, Set.of(indexToDelete));
         ClusterState after = service.deleteIndices(before, Set.of(indexToDelete));
 
 
-        assertThat(after.metadata().getIndices().get(indexToDelete.getName()), IsNull.nullValue());
+        assertThat(after.metadata().getIndices().get(indexToDelete.getName()), nullValue());
         assertThat(after.metadata().getIndices().size(), equalTo(numBackingIndices - 1));
         assertThat(after.metadata().getIndices().size(), equalTo(numBackingIndices - 1));
-        assertThat(
-            after.metadata().getIndices().get(DataStream.getDefaultBackingIndexName(dataStreamName, numIndexToDelete)),
-            IsNull.nullValue()
-        );
+        assertThat(after.metadata().getIndices().get(DataStream.getDefaultBackingIndexName(dataStreamName, numIndexToDelete)), nullValue());
     }
     }
 
 
     public void testDeleteMultipleBackingIndexForDataStream() {
     public void testDeleteMultipleBackingIndexForDataStream() {
@@ -163,10 +184,10 @@ public class MetadataDeleteIndexServiceTests extends ESTestCase {
         ClusterState after = service.deleteIndices(before, indicesToDelete);
         ClusterState after = service.deleteIndices(before, indicesToDelete);
 
 
         DataStream dataStream = after.metadata().dataStreams().get(dataStreamName);
         DataStream dataStream = after.metadata().dataStreams().get(dataStreamName);
-        assertThat(dataStream, IsNull.notNullValue());
+        assertThat(dataStream, notNullValue());
         assertThat(dataStream.getIndices().size(), equalTo(numBackingIndices - indexNumbersToDelete.size()));
         assertThat(dataStream.getIndices().size(), equalTo(numBackingIndices - indexNumbersToDelete.size()));
         for (Index i : indicesToDelete) {
         for (Index i : indicesToDelete) {
-            assertThat(after.metadata().getIndices().get(i.getName()), IsNull.nullValue());
+            assertThat(after.metadata().getIndices().get(i.getName()), nullValue());
             assertFalse(dataStream.getIndices().contains(i));
             assertFalse(dataStream.getIndices().contains(i));
         }
         }
         assertThat(after.metadata().getIndices().size(), equalTo(numBackingIndices - indexNumbersToDelete.size()));
         assertThat(after.metadata().getIndices().size(), equalTo(numBackingIndices - indexNumbersToDelete.size()));

+ 5 - 5
server/src/test/java/org/elasticsearch/cluster/metadata/MetadataIndexTemplateServiceTests.java

@@ -56,16 +56,16 @@ import static org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.DE
 import static org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.innerRemoveComponentTemplate;
 import static org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.innerRemoveComponentTemplate;
 import static org.elasticsearch.common.settings.Settings.builder;
 import static org.elasticsearch.common.settings.Settings.builder;
 import static org.elasticsearch.indices.ShardLimitValidatorTests.createTestShardLimitService;
 import static org.elasticsearch.indices.ShardLimitValidatorTests.createTestShardLimitService;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.containsStringIgnoringCase;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.containsStringIgnoringCase;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.matchesRegex;
 import static org.hamcrest.Matchers.matchesRegex;
+import static org.hamcrest.Matchers.not;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.Matchers.sameInstance;
 import static org.hamcrest.Matchers.sameInstance;

+ 11 - 14
server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java

@@ -79,7 +79,8 @@ public class MetadataTests extends ESTestCase {
             .build();
             .build();
 
 
         {
         {
-            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(new GetAliasesRequest(), Strings.EMPTY_ARRAY);
+            GetAliasesRequest request = new GetAliasesRequest();
+            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(request.aliases(), Strings.EMPTY_ARRAY);
             assertThat(aliases.size(), equalTo(0));
             assertThat(aliases.size(), equalTo(0));
         }
         }
         {
         {
@@ -91,7 +92,7 @@ public class MetadataTests extends ESTestCase {
                 // replacing with empty aliases behaves as if aliases were unspecified at request building
                 // replacing with empty aliases behaves as if aliases were unspecified at request building
                 request.replaceAliases(Strings.EMPTY_ARRAY);
                 request.replaceAliases(Strings.EMPTY_ARRAY);
             }
             }
-            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(new GetAliasesRequest(), new String[] { "index" });
+            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(request.aliases(), new String[] { "index" });
             assertThat(aliases.size(), equalTo(1));
             assertThat(aliases.size(), equalTo(1));
             List<AliasMetadata> aliasMetadataList = aliases.get("index");
             List<AliasMetadata> aliasMetadataList = aliases.get("index");
             assertThat(aliasMetadataList.size(), equalTo(2));
             assertThat(aliasMetadataList.size(), equalTo(2));
@@ -99,10 +100,8 @@ public class MetadataTests extends ESTestCase {
             assertThat(aliasMetadataList.get(1).alias(), equalTo("alias2"));
             assertThat(aliasMetadataList.get(1).alias(), equalTo("alias2"));
         }
         }
         {
         {
-            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(
-                new GetAliasesRequest("alias*"),
-                new String[] { "index" }
-            );
+            GetAliasesRequest request = new GetAliasesRequest("alias*");
+            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(request.aliases(), new String[] { "index" });
             assertThat(aliases.size(), equalTo(1));
             assertThat(aliases.size(), equalTo(1));
             List<AliasMetadata> aliasMetadataList = aliases.get("index");
             List<AliasMetadata> aliasMetadataList = aliases.get("index");
             assertThat(aliasMetadataList.size(), equalTo(2));
             assertThat(aliasMetadataList.size(), equalTo(2));
@@ -110,10 +109,8 @@ public class MetadataTests extends ESTestCase {
             assertThat(aliasMetadataList.get(1).alias(), equalTo("alias2"));
             assertThat(aliasMetadataList.get(1).alias(), equalTo("alias2"));
         }
         }
         {
         {
-            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(
-                new GetAliasesRequest("alias1"),
-                new String[] { "index" }
-            );
+            GetAliasesRequest request = new GetAliasesRequest("alias1");
+            ImmutableOpenMap<String, List<AliasMetadata>> aliases = metadata.findAliases(request.aliases(), new String[] { "index" });
             assertThat(aliases.size(), equalTo(1));
             assertThat(aliases.size(), equalTo(1));
             List<AliasMetadata> aliasMetadataList = aliases.get("index");
             List<AliasMetadata> aliasMetadataList = aliases.get("index");
             assertThat(aliasMetadataList.size(), equalTo(1));
             assertThat(aliasMetadataList.size(), equalTo(1));
@@ -144,8 +141,8 @@ public class MetadataTests extends ESTestCase {
                     .putAlias(AliasMetadata.builder("alias2").build())
                     .putAlias(AliasMetadata.builder("alias2").build())
             )
             )
             .build();
             .build();
-        List<AliasMetadata> aliases = metadata.findAliases(new GetAliasesRequest().aliases("*", "-alias1"), new String[] { "index" })
-            .get("index");
+        GetAliasesRequest request = new GetAliasesRequest().aliases("*", "-alias1");
+        List<AliasMetadata> aliases = metadata.findAliases(request.aliases(), new String[] { "index" }).get("index");
         assertThat(aliases.size(), equalTo(1));
         assertThat(aliases.size(), equalTo(1));
         assertThat(aliases.get(0).alias(), equalTo("alias2"));
         assertThat(aliases.get(0).alias(), equalTo("alias2"));
     }
     }
@@ -179,8 +176,8 @@ public class MetadataTests extends ESTestCase {
                     .putAlias(AliasMetadata.builder("bb").build())
                     .putAlias(AliasMetadata.builder("bb").build())
             )
             )
             .build();
             .build();
-        List<AliasMetadata> aliases = metadata.findAliases(new GetAliasesRequest().aliases("a*", "-*b", "b*"), new String[] { "index" })
-            .get("index");
+        GetAliasesRequest request = new GetAliasesRequest().aliases("a*", "-*b", "b*");
+        List<AliasMetadata> aliases = metadata.findAliases(request.aliases(), new String[] { "index" }).get("index");
         assertThat(aliases.size(), equalTo(2));
         assertThat(aliases.size(), equalTo(2));
         assertThat(aliases.get(0).alias(), equalTo("aa"));
         assertThat(aliases.get(0).alias(), equalTo("aa"));
         assertThat(aliases.get(1).alias(), equalTo("bb"));
         assertThat(aliases.get(1).alias(), equalTo("bb"));

+ 2 - 2
server/src/test/java/org/elasticsearch/cluster/metadata/TemplateUpgradeServiceTests.java

@@ -51,13 +51,13 @@ import java.util.stream.IntStream;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.emptyMap;
 import static org.elasticsearch.test.ClusterServiceUtils.createClusterService;
 import static org.elasticsearch.test.ClusterServiceUtils.createClusterService;
 import static org.elasticsearch.test.ClusterServiceUtils.setState;
 import static org.elasticsearch.test.ClusterServiceUtils.setState;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.CoreMatchers.startsWith;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.nullValue;
+import static org.hamcrest.Matchers.startsWith;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mock;

+ 1 - 1
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/annotations/AnnotationIndex.java

@@ -114,7 +114,7 @@ public class AnnotationIndex {
                 .addAliasAction(IndicesAliasesRequest.AliasActions.add().index(LATEST_INDEX_NAME).alias(READ_ALIAS_NAME).isHidden(true))
                 .addAliasAction(IndicesAliasesRequest.AliasActions.add().index(LATEST_INDEX_NAME).alias(READ_ALIAS_NAME).isHidden(true))
                 .addAliasAction(IndicesAliasesRequest.AliasActions.add().index(LATEST_INDEX_NAME).alias(WRITE_ALIAS_NAME).isHidden(true));
                 .addAliasAction(IndicesAliasesRequest.AliasActions.add().index(LATEST_INDEX_NAME).alias(WRITE_ALIAS_NAME).isHidden(true));
             for (String oldIndexName : OLD_INDEX_NAMES) {
             for (String oldIndexName : OLD_INDEX_NAMES) {
-                if (state.getMetadata().getIndicesLookup().containsKey(oldIndexName)) {
+                if (state.getMetadata().hasIndexAbstraction(oldIndexName)) {
                     requestBuilder.removeAlias(oldIndexName, WRITE_ALIAS_NAME);
                     requestBuilder.removeAlias(oldIndexName, WRITE_ALIAS_NAME);
                 }
                 }
             }
             }

+ 1 - 5
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/utils/MlIndexAndAlias.java

@@ -182,7 +182,7 @@ public final class MlIndexAndAlias {
         final String primaryIndex = descriptor.getPrimaryIndex();
         final String primaryIndex = descriptor.getPrimaryIndex();
 
 
         // The check for existence of the index is against the cluster state, so very cheap
         // The check for existence of the index is against the cluster state, so very cheap
-        if (hasIndex(clusterState, primaryIndex)) {
+        if (clusterState.getMetadata().hasIndexAbstraction(primaryIndex)) {
             finalListener.onResponse(true);
             finalListener.onResponse(true);
             return;
             return;
         }
         }
@@ -382,8 +382,4 @@ public final class MlIndexAndAlias {
     public static boolean hasIndexTemplate(ClusterState state, String templateName) {
     public static boolean hasIndexTemplate(ClusterState state, String templateName) {
         return state.getMetadata().templatesV2().containsKey(templateName);
         return state.getMetadata().templatesV2().containsKey(templateName);
     }
     }
-
-    public static boolean hasIndex(ClusterState state, String index) {
-        return state.getMetadata().getIndicesLookup().containsKey(index);
-    }
 }
 }

+ 2 - 3
x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichPolicyRunner.java

@@ -33,7 +33,6 @@ import org.elasticsearch.client.Client;
 import org.elasticsearch.client.FilterClient;
 import org.elasticsearch.client.FilterClient;
 import org.elasticsearch.client.OriginSettingClient;
 import org.elasticsearch.client.OriginSettingClient;
 import org.elasticsearch.cluster.ClusterState;
 import org.elasticsearch.cluster.ClusterState;
-import org.elasticsearch.cluster.metadata.AliasMetadata;
 import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
 import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
 import org.elasticsearch.cluster.metadata.MappingMetadata;
 import org.elasticsearch.cluster.metadata.MappingMetadata;
 import org.elasticsearch.cluster.service.ClusterService;
 import org.elasticsearch.cluster.service.ClusterService;
@@ -569,9 +568,9 @@ public class EnrichPolicyRunner implements Runnable {
         GetAliasesRequest aliasRequest = new GetAliasesRequest(enrichIndexBase);
         GetAliasesRequest aliasRequest = new GetAliasesRequest(enrichIndexBase);
         ClusterState clusterState = clusterService.state();
         ClusterState clusterState = clusterService.state();
         String[] concreteIndices = indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(clusterState, aliasRequest);
         String[] concreteIndices = indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(clusterState, aliasRequest);
-        ImmutableOpenMap<String, List<AliasMetadata>> aliases = clusterState.metadata().findAliases(aliasRequest, concreteIndices);
+        String[] aliases = aliasRequest.aliases();
         IndicesAliasesRequest aliasToggleRequest = new IndicesAliasesRequest();
         IndicesAliasesRequest aliasToggleRequest = new IndicesAliasesRequest();
-        String[] indices = aliases.keys().toArray(String.class);
+        String[] indices = clusterState.metadata().findAliases(aliases, concreteIndices).keys().toArray(String.class);
         if (indices.length > 0) {
         if (indices.length > 0) {
             aliasToggleRequest.addAliasAction(IndicesAliasesRequest.AliasActions.remove().indices(indices).alias(enrichIndexBase));
             aliasToggleRequest.addAliasAction(IndicesAliasesRequest.AliasActions.remove().indices(indices).alias(enrichIndexBase));
         }
         }

+ 1 - 1
x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/TransformClusterStateListener.java

@@ -66,7 +66,7 @@ class TransformClusterStateListener implements ClusterStateListener {
     private static void createAuditAliasForDataFrameBWC(ClusterState state, Client client, final ActionListener<Boolean> finalListener) {
     private static void createAuditAliasForDataFrameBWC(ClusterState state, Client client, final ActionListener<Boolean> finalListener) {
 
 
         // check if old audit index exists, no need to create the alias if it does not
         // check if old audit index exists, no need to create the alias if it does not
-        if (state.getMetadata().getIndicesLookup().containsKey(TransformInternalIndexConstants.AUDIT_INDEX_DEPRECATED) == false) {
+        if (state.getMetadata().hasIndexAbstraction(TransformInternalIndexConstants.AUDIT_INDEX_DEPRECATED) == false) {
             finalListener.onResponse(false);
             finalListener.onResponse(false);
             return;
             return;
         }
         }

+ 1 - 1
x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/persistence/TransformInternalIndex.java

@@ -359,7 +359,7 @@ public final class TransformInternalIndex {
     }
     }
 
 
     protected static boolean hasLatestVersionedIndex(ClusterState state) {
     protected static boolean hasLatestVersionedIndex(ClusterState state) {
-        return state.getMetadata().getIndicesLookup().containsKey(TransformInternalIndexConstants.LATEST_INDEX_VERSIONED_NAME);
+        return state.getMetadata().hasIndexAbstraction(TransformInternalIndexConstants.LATEST_INDEX_VERSIONED_NAME);
     }
     }
 
 
     protected static boolean allPrimaryShardsActiveForLatestVersionedIndex(ClusterState state) {
     protected static boolean allPrimaryShardsActiveForLatestVersionedIndex(ClusterState state) {