Skip to content

Commit 4b509c1

Browse files
committed
Merge branch 'data-stream-settings-transport-actions' into data-stream-settings-rest-actions
2 parents e3637d7 + 7bced31 commit 4b509c1

File tree

4 files changed

+412
-2
lines changed

4 files changed

+412
-2
lines changed

server/src/main/java/org/elasticsearch/action/datastreams/UpdateDataStreamSettingsAction.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,15 @@ public boolean equals(Object o) {
101101
if (this == o) return true;
102102
if (o == null || getClass() != o.getClass()) return false;
103103
Request request = (Request) o;
104-
return Arrays.equals(dataStreamNames, request.dataStreamNames) && settings.equals(request.settings);
104+
return Arrays.equals(dataStreamNames, request.dataStreamNames)
105+
&& settings.equals(request.settings)
106+
&& Objects.equals(masterNodeTimeout(), request.masterNodeTimeout())
107+
&& Objects.equals(ackTimeout(), request.ackTimeout());
105108
}
106109

107110
@Override
108111
public int hashCode() {
109-
return Objects.hash(dataStreamNames, settings);
112+
return Objects.hash(Arrays.hashCode(dataStreamNames), settings, masterNodeTimeout(), ackTimeout());
110113
}
111114

112115
}
@@ -139,6 +142,19 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
139142
Iterators.single((builder, params1) -> builder.endArray().endObject())
140143
);
141144
}
145+
146+
@Override
147+
public boolean equals(Object o) {
148+
if (this == o) return true;
149+
if (o == null || getClass() != o.getClass()) return false;
150+
Response response = (Response) o;
151+
return Objects.equals(dataStreamSettingsResponses, response.dataStreamSettingsResponses);
152+
}
153+
154+
@Override
155+
public int hashCode() {
156+
return Objects.hash(dataStreamSettingsResponses);
157+
}
142158
}
143159

144160
public record DataStreamSettingsResponse(
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.action.datastreams;
11+
12+
import org.elasticsearch.common.bytes.BytesReference;
13+
import org.elasticsearch.common.settings.Settings;
14+
import org.elasticsearch.common.xcontent.XContentHelper;
15+
import org.elasticsearch.test.ESTestCase;
16+
import org.elasticsearch.xcontent.ToXContent;
17+
import org.elasticsearch.xcontent.XContentBuilder;
18+
import org.elasticsearch.xcontent.XContentType;
19+
20+
import java.io.IOException;
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
import java.util.Map;
24+
25+
import static org.elasticsearch.xcontent.ToXContent.EMPTY_PARAMS;
26+
import static org.hamcrest.Matchers.equalTo;
27+
28+
public class GetDataStreamSettingsActionTests extends ESTestCase {
29+
30+
public void testResponseToXContentEmpty() throws IOException {
31+
List<GetDataStreamSettingsAction.DataStreamSettingsResponse> responseList = new ArrayList<>();
32+
GetDataStreamSettingsAction.Response response = new GetDataStreamSettingsAction.Response(responseList);
33+
try (XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent())) {
34+
builder.humanReadable(true);
35+
response.toXContentChunked(ToXContent.EMPTY_PARAMS).forEachRemaining(xcontent -> {
36+
try {
37+
xcontent.toXContent(builder, EMPTY_PARAMS);
38+
} catch (IOException e) {
39+
fail(e);
40+
}
41+
});
42+
Map<String, Object> xContentMap = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
43+
assertThat(xContentMap, equalTo(Map.of("data_streams", List.of())));
44+
}
45+
}
46+
47+
public void testResponseToXContent() throws IOException {
48+
Map<String, String> dataStream1Settings = Map.of("setting1", "value1", "setting2", "value2");
49+
Map<String, String> dataStream1EffectiveSettings = Map.of("setting1", "value1", "setting2", "value2", "setting3", "value3");
50+
Map<String, String> dataStream2Settings = Map.of("setting4", "value4", "setting5", "value5");
51+
Map<String, String> dataStream2EffectiveSettings = Map.of("setting4", "value4", "setting5", "value5", "settings6", "value6");
52+
GetDataStreamSettingsAction.DataStreamSettingsResponse dataStreamSettingsResponse1 =
53+
new GetDataStreamSettingsAction.DataStreamSettingsResponse(
54+
"dataStream1",
55+
Settings.builder().loadFromMap(dataStream1Settings).build(),
56+
Settings.builder().loadFromMap(dataStream1EffectiveSettings).build()
57+
);
58+
GetDataStreamSettingsAction.DataStreamSettingsResponse dataStreamSettingsResponse2 =
59+
new GetDataStreamSettingsAction.DataStreamSettingsResponse(
60+
"dataStream2",
61+
Settings.builder().loadFromMap(dataStream2Settings).build(),
62+
Settings.builder().loadFromMap(dataStream2EffectiveSettings).build()
63+
);
64+
List<GetDataStreamSettingsAction.DataStreamSettingsResponse> responseList = List.of(
65+
dataStreamSettingsResponse1,
66+
dataStreamSettingsResponse2
67+
);
68+
GetDataStreamSettingsAction.Response response = new GetDataStreamSettingsAction.Response(responseList);
69+
try (XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent())) {
70+
builder.humanReadable(true);
71+
response.toXContentChunked(ToXContent.EMPTY_PARAMS).forEachRemaining(xcontent -> {
72+
try {
73+
xcontent.toXContent(builder, EMPTY_PARAMS);
74+
} catch (IOException e) {
75+
fail(e);
76+
}
77+
});
78+
Map<String, Object> xContentMap = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
79+
assertThat(
80+
xContentMap,
81+
equalTo(
82+
Map.of(
83+
"data_streams",
84+
List.of(
85+
Map.of(
86+
"name",
87+
"dataStream1",
88+
"settings",
89+
dataStream1Settings,
90+
"effective_settings",
91+
dataStream1EffectiveSettings
92+
),
93+
Map.of(
94+
"name",
95+
"dataStream2",
96+
"settings",
97+
dataStream2Settings,
98+
"effective_settings",
99+
dataStream2EffectiveSettings
100+
)
101+
)
102+
)
103+
)
104+
);
105+
}
106+
}
107+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.action.datastreams;
11+
12+
import org.elasticsearch.cluster.metadata.ComponentTemplateTests;
13+
import org.elasticsearch.common.io.stream.Writeable;
14+
import org.elasticsearch.common.settings.Settings;
15+
import org.elasticsearch.core.TimeValue;
16+
import org.elasticsearch.test.AbstractWireSerializingTestCase;
17+
import org.elasticsearch.test.ESTestCase;
18+
19+
import java.io.IOException;
20+
import java.util.Arrays;
21+
import java.util.function.Supplier;
22+
23+
import static org.elasticsearch.cluster.metadata.ComponentTemplateTests.randomSettings;
24+
25+
public class UpdateDataStreamSettingsActionRequestTests extends AbstractWireSerializingTestCase<UpdateDataStreamSettingsAction.Request> {
26+
27+
@Override
28+
protected Writeable.Reader<UpdateDataStreamSettingsAction.Request> instanceReader() {
29+
return UpdateDataStreamSettingsAction.Request::new;
30+
}
31+
32+
@Override
33+
protected UpdateDataStreamSettingsAction.Request createTestInstance() {
34+
UpdateDataStreamSettingsAction.Request request = new UpdateDataStreamSettingsAction.Request(
35+
randomSettings(),
36+
randomTimeValue(),
37+
randomTimeValue()
38+
);
39+
request.indices(randomIndices());
40+
return request;
41+
}
42+
43+
@Override
44+
protected UpdateDataStreamSettingsAction.Request mutateInstance(UpdateDataStreamSettingsAction.Request instance) throws IOException {
45+
String[] indices = instance.indices();
46+
Settings settings = instance.getSettings();
47+
TimeValue masterNodeTimeout = instance.masterNodeTimeout();
48+
TimeValue ackTimeout = instance.ackTimeout();
49+
switch (between(0, 3)) {
50+
case 0 -> {
51+
indices = randomArrayValueOtherThan(indices, this::randomIndices);
52+
}
53+
case 1 -> {
54+
settings = randomValueOtherThan(settings, ComponentTemplateTests::randomSettings);
55+
}
56+
case 2 -> {
57+
masterNodeTimeout = randomValueOtherThan(masterNodeTimeout, ESTestCase::randomTimeValue);
58+
}
59+
case 3 -> {
60+
ackTimeout = randomValueOtherThan(ackTimeout, ESTestCase::randomTimeValue);
61+
}
62+
default -> throw new AssertionError("Should not be here");
63+
}
64+
return new UpdateDataStreamSettingsAction.Request(settings, masterNodeTimeout, ackTimeout).indices(indices);
65+
}
66+
67+
private String[] randomIndices() {
68+
return randomList(10, () -> randomAlphaOfLength(20)).toArray(new String[0]);
69+
}
70+
71+
public static <T> T[] randomArrayValueOtherThan(T[] input, Supplier<T[]> randomSupplier) {
72+
return randomValueOtherThanMany(v -> Arrays.equals(input, v), randomSupplier);
73+
}
74+
}

0 commit comments

Comments
 (0)