Browse Source

Test index deprecations when closed (#120528) (#121182)

This extends `IndexDeprecationChecksTests` so that it tests two cases
for each check: the regular one where the index is open, and one where
the index is closed (i.e. the state is changed and a block added).

ES-10544 #comment Unit test backported in https://github.com/elastic/elasticsearch/pull/121182
Pete Gillin 8 months ago
parent
commit
a1ea26d38a

+ 113 - 17
x-pack/plugin/deprecation/src/test/java/org/elasticsearch/xpack/deprecation/IndexDeprecationCheckerTests.java

@@ -7,7 +7,11 @@
 
 package org.elasticsearch.xpack.deprecation;
 
+import com.carrotsearch.randomizedtesting.annotations.Name;
+import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
+
 import org.elasticsearch.cluster.ClusterState;
+import org.elasticsearch.cluster.block.ClusterBlocks;
 import org.elasticsearch.cluster.metadata.DataStream;
 import org.elasticsearch.cluster.metadata.DataStreamMetadata;
 import org.elasticsearch.cluster.metadata.DataStreamOptions;
@@ -39,6 +43,17 @@ import static org.hamcrest.Matchers.hasItem;
 
 public class IndexDeprecationCheckerTests extends ESTestCase {
 
+    private final IndexMetadata.State indexMetdataState;
+
+    public IndexDeprecationCheckerTests(@Name("indexMetadataState") IndexMetadata.State indexMetdataState) {
+        this.indexMetdataState = indexMetdataState;
+    }
+
+    @ParametersFactory
+    public static List<Object[]> createParameters() {
+        return List.of(new Object[] { IndexMetadata.State.OPEN }, new Object[] { IndexMetadata.State.CLOSE });
+    }
+
     private static final IndexVersion OLD_VERSION = IndexVersion.fromId(7170099);
 
     private final IndexNameExpressionResolver indexNameExpressionResolver = TestIndexNameExpressionResolver.newInstance();
@@ -49,10 +64,11 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
             .settings(settings(OLD_VERSION))
             .numberOfShards(1)
             .numberOfReplicas(0)
-            .state(randomBoolean() ? IndexMetadata.State.OPEN : IndexMetadata.State.CLOSE) // does not matter if its open or closed
+            .state(indexMetdataState)
             .build();
         ClusterState clusterState = ClusterState.builder(ClusterState.EMPTY_STATE)
             .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
             .build();
         DeprecationIssue expected = new DeprecationIssue(
             DeprecationIssue.Level.CRITICAL,
@@ -73,7 +89,10 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
     public void testOldTransformIndicesCheck() {
         var checker = new IndexDeprecationChecker(indexNameExpressionResolver, Map.of("test", List.of("test-transform")));
         var indexMetadata = indexMetadata("test", OLD_VERSION);
-        var clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        var clusterState = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         var expected = new DeprecationIssue(
             DeprecationIssue.Level.CRITICAL,
             "Old index with a compatibility version < 8.0",
@@ -92,7 +111,10 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
             Map.of("test", List.of("test-transform1", "test-transform2"))
         );
         var indexMetadata = indexMetadata("test", OLD_VERSION);
-        var clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        var clusterState = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         var expected = new DeprecationIssue(
             DeprecationIssue.Level.CRITICAL,
             "Old index with a compatibility version < 8.0",
@@ -114,6 +136,7 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
         var indexMetadata2 = indexMetadata("test2", OLD_VERSION);
         var clusterState = ClusterState.builder(ClusterState.EMPTY_STATE)
             .metadata(Metadata.builder().put(indexMetadata1, true).put(indexMetadata2, true))
+            .blocks(clusterBlocksForIndices(indexMetadata1, indexMetadata2))
             .build();
         var expected = Map.of(
             "test1",
@@ -144,7 +167,12 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
     }
 
     private IndexMetadata indexMetadata(String indexName, IndexVersion indexVersion) {
-        return IndexMetadata.builder(indexName).settings(settings(indexVersion)).numberOfShards(1).numberOfReplicas(0).build();
+        return IndexMetadata.builder(indexName)
+            .settings(settings(indexVersion))
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
     }
 
     public void testOldIndicesCheckDataStreamIndex() {
@@ -152,6 +180,7 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
             .settings(settings(OLD_VERSION).put("index.hidden", true))
             .numberOfShards(1)
             .numberOfReplicas(0)
+            .state(indexMetdataState)
             .build();
         DataStream dataStream = new DataStream(
             randomAlphaOfLength(10),
@@ -183,6 +212,7 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
                         )
                     )
             )
+            .blocks(clusterBlocksForIndices(indexMetadata))
             .build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             clusterState,
@@ -194,9 +224,15 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
     public void testOldIndicesCheckSnapshotIgnored() {
         Settings.Builder settings = settings(OLD_VERSION);
         settings.put(INDEX_STORE_TYPE_SETTING.getKey(), SearchableSnapshotsSettings.SEARCHABLE_SNAPSHOT_STORE_TYPE);
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
         ClusterState clusterState = ClusterState.builder(ClusterState.EMPTY_STATE)
             .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
             .build();
 
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
@@ -208,9 +244,15 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
 
     public void testOldIndicesIgnoredWarningCheck() {
         Settings.Builder settings = settings(OLD_VERSION).put(MetadataIndexStateService.VERIFIED_READ_ONLY_SETTING.getKey(), true);
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
         ClusterState clusterState = ClusterState.builder(ClusterState.EMPTY_STATE)
             .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
             .build();
         DeprecationIssue expected = new DeprecationIssue(
             DeprecationIssue.Level.WARNING,
@@ -232,8 +274,16 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
         Settings.Builder settings = settings(IndexVersion.current());
         settings.put(IndexSettings.INDEX_TRANSLOG_RETENTION_AGE_SETTING.getKey(), randomPositiveTimeValue());
         settings.put(IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.getKey(), between(1, 1024) + "b");
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
-        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
+        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             state,
             new DeprecationInfoAction.Request(TimeValue.THIRTY_SECONDS)
@@ -267,8 +317,16 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
             settings.put(IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.getKey(), between(1, 1024) + "b");
             settings.put(IndexSettings.INDEX_SOFT_DELETES_SETTING.getKey(), false);
         }
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
-        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
+        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             state,
             new DeprecationInfoAction.Request(TimeValue.THIRTY_SECONDS)
@@ -279,8 +337,16 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
     public void testIndexDataPathSetting() {
         Settings.Builder settings = settings(IndexVersion.current());
         settings.put(IndexMetadata.INDEX_DATA_PATH_SETTING.getKey(), createTempDir());
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
-        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
+        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             state,
             new DeprecationInfoAction.Request(TimeValue.THIRTY_SECONDS)
@@ -305,8 +371,16 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
     public void testSimpleFSSetting() {
         Settings.Builder settings = settings(IndexVersion.current());
         settings.put(INDEX_STORE_TYPE_SETTING.getKey(), "simplefs");
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
-        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
+        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             state,
             new DeprecationInfoAction.Request(TimeValue.THIRTY_SECONDS)
@@ -370,8 +444,12 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
             .numberOfShards(1)
             .numberOfReplicas(1)
             .putMapping(simpleMapping)
+            .state(indexMetdataState)
+            .build();
+        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(simpleIndex, true))
+            .blocks(clusterBlocksForIndices(simpleIndex))
             .build();
-        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(simpleIndex, true)).build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             state,
             new DeprecationInfoAction.Request(TimeValue.THIRTY_SECONDS)
@@ -393,8 +471,16 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
         String filter = randomFrom("include", "exclude", "require");
         String tier = randomFrom("hot", "warm", "cold", "frozen");
         settings.put("index.routing.allocation." + filter + ".data", tier);
-        IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).numberOfShards(1).numberOfReplicas(0).build();
-        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(Metadata.builder().put(indexMetadata, true)).build();
+        IndexMetadata indexMetadata = IndexMetadata.builder("test")
+            .settings(settings)
+            .numberOfShards(1)
+            .numberOfReplicas(0)
+            .state(indexMetdataState)
+            .build();
+        ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
+            .metadata(Metadata.builder().put(indexMetadata, true))
+            .blocks(clusterBlocksForIndices(indexMetadata))
+            .build();
         Map<String, List<DeprecationIssue>> issuesByIndex = checker.check(
             state,
             new DeprecationInfoAction.Request(TimeValue.THIRTY_SECONDS)
@@ -415,4 +501,14 @@ public class IndexDeprecationCheckerTests extends ESTestCase {
             )
         );
     }
+
+    private ClusterBlocks clusterBlocksForIndices(IndexMetadata... indicesMetadatas) {
+        ClusterBlocks.Builder builder = ClusterBlocks.builder();
+        for (IndexMetadata indexMetadata : indicesMetadatas) {
+            if (indexMetadata.getState() == IndexMetadata.State.CLOSE) {
+                builder.addIndexBlock(indexMetadata.getIndex().getName(), MetadataIndexStateService.INDEX_CLOSED_BLOCK);
+            }
+        }
+        return builder.build();
+    }
 }