From 97c08939798bd9ee1a637732d90811cc057d89bd Mon Sep 17 00:00:00 2001 From: Monu Singh Date: Thu, 25 Sep 2025 15:08:34 +0530 Subject: [PATCH] Fix validation exception on shrink --- .../rest-api-spec/test/indices.shrink/10_basic.yml | 14 ++++++++++++++ .../metadata/MetadataCreateIndexService.java | 2 +- .../metadata/MetadataCreateIndexServiceTests.java | 6 +++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.shrink/10_basic.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.shrink/10_basic.yml index 67b5be7eb0fd5..eaf3da27a1a45 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.shrink/10_basic.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.shrink/10_basic.yml @@ -72,6 +72,20 @@ setup: - match: { _id: "1" } - match: { _source: { foo: "hello world" } } + - do: + catch: /action_request_validation_exception/ + indices.shrink: + index: "source" + target: "new_shrunken_index" + wait_for_active_shards: 1 + cluster_manager_timeout: 10s + body: + settings: + index.number_of_replicas: 0 + index.number_of_shards: 1 + index.blocks.read_only: true + + # Related issue: https://github.com/opensearch-project/OpenSearch/issues/4845 --- "Returns error if target index's metadata write is blocked": diff --git a/server/src/main/java/org/opensearch/cluster/metadata/MetadataCreateIndexService.java b/server/src/main/java/org/opensearch/cluster/metadata/MetadataCreateIndexService.java index a889091140d12..ad427a4b2e777 100644 --- a/server/src/main/java/org/opensearch/cluster/metadata/MetadataCreateIndexService.java +++ b/server/src/main/java/org/opensearch/cluster/metadata/MetadataCreateIndexService.java @@ -1652,7 +1652,7 @@ static IndexMetadata validateResize(ClusterState state, String sourceIndex, Stri // ensure write operations on the source index is blocked if (state.blocks().indexBlocked(ClusterBlockLevel.WRITE, sourceIndex) == false) { - throw new IllegalStateException( + throw new IllegalArgumentException( "index " + sourceIndex + " must block write operations to resize index. use \"index.blocks.write=true\"" ); } diff --git a/server/src/test/java/org/opensearch/cluster/metadata/MetadataCreateIndexServiceTests.java b/server/src/test/java/org/opensearch/cluster/metadata/MetadataCreateIndexServiceTests.java index 785ba35afaf4d..a642c5a71faef 100644 --- a/server/src/test/java/org/opensearch/cluster/metadata/MetadataCreateIndexServiceTests.java +++ b/server/src/test/java/org/opensearch/cluster/metadata/MetadataCreateIndexServiceTests.java @@ -341,7 +341,7 @@ public void testValidateShrinkIndex() { assertEquals( "index source must block write operations to resize index. use \"index.blocks.write=true\"", expectThrows( - IllegalStateException.class, + IllegalArgumentException.class, () -> MetadataCreateIndexService.validateShrinkIndex( createClusterState("source", randomIntBetween(2, 100), randomIntBetween(0, 10), Settings.EMPTY), "source", @@ -443,7 +443,7 @@ public void testValidateSplitIndex() { assertEquals( "index source must block write operations to resize index. use \"index.blocks.write=true\"", expectThrows( - IllegalStateException.class, + IllegalArgumentException.class, () -> MetadataCreateIndexService.validateSplitIndex( createClusterState("source", randomIntBetween(2, 100), randomIntBetween(0, 10), Settings.EMPTY), "source", @@ -529,7 +529,7 @@ public void testValidateCloneIndex() { assertEquals( "index source must block write operations to resize index. use \"index.blocks.write=true\"", expectThrows( - IllegalStateException.class, + IllegalArgumentException.class, () -> MetadataCreateIndexService.validateCloneIndex( createClusterState("source", randomIntBetween(2, 100), randomIntBetween(0, 10), Settings.EMPTY), "source",