Skip to content

Commit ac2184c

Browse files
authored
Data streams: throw ResourceAlreadyExists exception (#60518)
For consistency reasons (and reducing the overload of IllegalArgumentException) this changes the exception thrown when trying to create a data stream that already exists.
1 parent 74b56f3 commit ac2184c

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateDataStreamService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.apache.logging.log4j.LogManager;
2222
import org.apache.logging.log4j.Logger;
23+
import org.elasticsearch.ResourceAlreadyExistsException;
2324
import org.elasticsearch.Version;
2425
import org.elasticsearch.action.ActionListener;
2526
import org.elasticsearch.action.admin.indices.create.CreateIndexClusterStateUpdateRequest;
@@ -126,7 +127,7 @@ static ClusterState createDataStream(MetadataCreateIndexService metadataCreateIn
126127
throw new IllegalStateException("data streams require minimum node version of " + Version.V_7_9_0);
127128
}
128129
if (currentState.metadata().dataStreams().containsKey(request.name)) {
129-
throw new IllegalArgumentException("data_stream [" + request.name + "] already exists");
130+
throw new ResourceAlreadyExistsException("data_stream [" + request.name + "] already exists");
130131
}
131132

132133
MetadataCreateIndexService.validateIndexOrAliasName(request.name,

server/src/test/java/org/elasticsearch/cluster/metadata/MetadataCreateDataStreamServiceTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.elasticsearch.cluster.metadata;
2020

21+
import org.elasticsearch.ResourceAlreadyExistsException;
2122
import org.elasticsearch.Version;
2223
import org.elasticsearch.action.admin.indices.create.CreateIndexClusterStateUpdateRequest;
2324
import org.elasticsearch.cluster.ClusterName;
@@ -72,7 +73,7 @@ public void testCreateDuplicateDataStream() throws Exception {
7273
CreateDataStreamClusterStateUpdateRequest req =
7374
new CreateDataStreamClusterStateUpdateRequest(dataStreamName, TimeValue.ZERO, TimeValue.ZERO);
7475

75-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
76+
ResourceAlreadyExistsException e = expectThrows(ResourceAlreadyExistsException.class,
7677
() -> MetadataCreateDataStreamService.createDataStream(metadataCreateIndexService, cs, req));
7778
assertThat(e.getMessage(), containsString("data_stream [" + dataStreamName + "] already exists"));
7879
}

x-pack/plugin/data-streams/qa/rest/src/test/resources/rest-api-spec/test/data-streams/10_basic.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,31 @@ setup:
116116
- match: { error.root_cause.0.type: "illegal_argument_exception" }
117117
- match: { error.root_cause.0.reason: "data_stream [invalid-data-stream#-name] must not contain '#'" }
118118

119+
---
120+
"Create existing data stream":
121+
- skip:
122+
version: " - 7.8.99"
123+
reason: "data streams only supported in 7.9+"
124+
125+
- do:
126+
indices.create_data_stream:
127+
name: simple-data-stream1
128+
- is_true: acknowledged
129+
130+
- do:
131+
catch: bad_request
132+
indices.create_data_stream:
133+
name: simple-data-stream1
134+
135+
- match: { status: 400 }
136+
- match: { error.root_cause.0.type: "resource_already_exists_exception" }
137+
- match: { error.root_cause.0.reason: "data_stream [simple-data-stream1] already exists" }
138+
139+
- do:
140+
indices.delete_data_stream:
141+
name: simple-data-stream1
142+
- is_true: acknowledged
143+
119144
---
120145
"Get data stream":
121146
- skip:

0 commit comments

Comments
 (0)