diff --git a/CHANGELOG.md b/CHANGELOG.md index 031dbff5836c8..569f756dfbe5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Optimized date histogram aggregations by preventing unnecessary object allocations in date rounding utils ([19088](https://github.com/opensearch-project/OpenSearch/pull/19088)) - Optimize source conversion in gRPC search hits using zero-copy BytesRef ([#19280](https://github.com/opensearch-project/OpenSearch/pull/19280)) - Add failureaccess as runtime dependency to transport-grpc module ([#19339](https://github.com/opensearch-project/OpenSearch/pull/19339)) +- IllegalArgumentException when shrink operation performed on index without write block ([#19412](https://github.com/opensearch-project/OpenSearch/pull/19412)) ### Fixed - Fix unnecessary refreshes on update preparation failures ([#15261](https://github.com/opensearch-project/OpenSearch/issues/15261)) 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",