Skip to content

Commit a18c390

Browse files
Fix tests
1 parent 84b0c9e commit a18c390

File tree

5 files changed

+81
-13
lines changed

5 files changed

+81
-13
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,13 +824,19 @@ private Iterator<? extends ToXContent> toXContentChunkedWithSingleProjectFormat(
824824
);
825825
}
826826

827+
// make order deterministic
828+
Iterator<ReservedStateMetadata> reservedStateMetadataIterator = reservedStateMetadata.entrySet().stream()
829+
.sorted(Map.Entry.comparingByKey())
830+
.map(Map.Entry::getValue)
831+
.iterator();
832+
827833
return Iterators.concat(
828834
start,
829835
clusterCoordination,
830836
persistentSettings,
831837
project.toXContentChunked(p),
832838
customs,
833-
ChunkedToXContentHelper.object("reserved_state", reservedStateMetadata.values().iterator()),
839+
ChunkedToXContentHelper.object("reserved_state", reservedStateMetadataIterator),
834840
ChunkedToXContentHelper.endObject()
835841
);
836842
}

server/src/main/java/org/elasticsearch/reservedstate/service/ReservedStateErrorTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ ClusterState execute(ClusterState currentState) {
9494
var errorMetadata = new ReservedStateErrorMetadata(errorState.version(), errorState.errorKind(), errorState.errors());
9595

9696
if (errorState.projectId().isPresent()) {
97-
ProjectStateRegistry projectStateRegistry = currentState.custom(ProjectStateRegistry.TYPE);
97+
ProjectStateRegistry projectStateRegistry = ProjectStateRegistry.get(currentState);
9898

9999
ProjectId projectId = errorState.projectId().get();
100100
ReservedStateMetadata reservedMetadata = projectStateRegistry.reservedStateMetadata(projectId).get(errorState.namespace());

server/src/test/java/org/elasticsearch/cluster/ClusterStateTests.java

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import org.elasticsearch.cluster.metadata.MetadataTests;
2727
import org.elasticsearch.cluster.metadata.ProjectId;
2828
import org.elasticsearch.cluster.metadata.ProjectMetadata;
29+
import org.elasticsearch.cluster.metadata.ReservedStateHandlerMetadata;
30+
import org.elasticsearch.cluster.metadata.ReservedStateMetadata;
2931
import org.elasticsearch.cluster.node.DiscoveryNode;
3032
import org.elasticsearch.cluster.node.DiscoveryNodeUtils;
3133
import org.elasticsearch.cluster.node.DiscoveryNodes;
@@ -44,6 +46,9 @@
4446
import org.elasticsearch.common.bytes.BytesArray;
4547
import org.elasticsearch.common.bytes.BytesReference;
4648
import org.elasticsearch.common.collect.Iterators;
49+
import org.elasticsearch.common.io.stream.BytesStreamOutput;
50+
import org.elasticsearch.common.io.stream.NamedWriteableAwareStreamInput;
51+
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
4752
import org.elasticsearch.common.settings.Setting;
4853
import org.elasticsearch.common.settings.Settings;
4954
import org.elasticsearch.common.transport.TransportAddress;
@@ -85,8 +90,12 @@
8590
import static java.util.Collections.singletonMap;
8691
import static org.elasticsearch.cluster.metadata.IndexMetadata.SETTING_VERSION_CREATED;
8792
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertToXContentEquivalent;
93+
import static org.hamcrest.Matchers.aMapWithSize;
94+
import static org.hamcrest.Matchers.contains;
95+
import static org.hamcrest.Matchers.containsInAnyOrder;
8896
import static org.hamcrest.Matchers.containsString;
8997
import static org.hamcrest.Matchers.equalTo;
98+
import static org.hamcrest.Matchers.hasKey;
9099
import static org.hamcrest.Matchers.instanceOf;
91100
import static org.hamcrest.Matchers.not;
92101
import static org.hamcrest.Matchers.notNullValue;
@@ -515,8 +524,7 @@ public void testToXContentWithMultipleProjects() throws IOException {
515524
"event_ingested_range": { "shards": [] }
516525
}
517526
},
518-
"index-graveyard": { "tombstones": [] },
519-
"reserved_state": {}
527+
"index-graveyard": { "tombstones": [] }
520528
},
521529
{
522530
"id": "3LftaL7hgfXAsF60Gm6jcD",
@@ -573,15 +581,13 @@ public void testToXContentWithMultipleProjects() throws IOException {
573581
"event_ingested_range": { "shards": [] }
574582
}
575583
},
576-
"index-graveyard": { "tombstones": [] },
577-
"reserved_state": {}
584+
"index-graveyard": { "tombstones": [] }
578585
},
579586
{
580587
"id": "WHyuJ0uqBYOPgHX9kYUXlZ",
581588
"templates": {},
582589
"indices": {},
583-
"index-graveyard": { "tombstones": [] },
584-
"reserved_state": {}
590+
"index-graveyard": { "tombstones": [] }
585591
}
586592
],
587593
"reserved_state": {}
@@ -2241,4 +2247,62 @@ public static int expectedChunkCount(ToXContent.Params params, ClusterState clus
22412247

22422248
return Math.toIntExact(chunkCount);
22432249
}
2250+
2251+
public void testSerialization() throws IOException {
2252+
ClusterState clusterState = buildClusterState();
2253+
BytesStreamOutput out = new BytesStreamOutput();
2254+
clusterState.writeTo(out);
2255+
2256+
// check it deserializes ok
2257+
NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(ClusterModule.getNamedWriteables());
2258+
ClusterState deserialisedClusterState = ClusterState.readFrom(new NamedWriteableAwareStreamInput(out.bytes().streamInput(), namedWriteableRegistry), null);
2259+
2260+
// check it matches the original object
2261+
Metadata deserializedMetadata = deserialisedClusterState.metadata();
2262+
assertThat(deserializedMetadata.projects(), aMapWithSize(1));
2263+
assertThat(deserializedMetadata.projects(), hasKey(ProjectId.DEFAULT));
2264+
2265+
assertThat(deserializedMetadata.getProject(ProjectId.DEFAULT).templates(), hasKey("template"));
2266+
assertThat(deserializedMetadata.getProject(ProjectId.DEFAULT).indices(), hasKey("index"));
2267+
}
2268+
2269+
public void testCombinedReservedMetadataSerialization() throws IOException {
2270+
ClusterState clusterState = ClusterState.builder(buildClusterState())
2271+
.putCustom(
2272+
ProjectStateRegistry.TYPE,
2273+
ProjectStateRegistry.builder()
2274+
.putReservedStateMetadata(ProjectId.DEFAULT, ReservedStateMetadata.builder("file_settings").putHandler(
2275+
new ReservedStateHandlerMetadata("settings", Set.of(PROJECT_SETTING.getKey(), PROJECT_SETTING2.getKey()))
2276+
).build())
2277+
.build()
2278+
)
2279+
.build();
2280+
2281+
TransportVersion oldVersion = TransportVersionUtils.getPreviousVersion(TransportVersions.MULTI_PROJECT);
2282+
2283+
BytesStreamOutput out = new BytesStreamOutput();
2284+
out.setTransportVersion(oldVersion);
2285+
clusterState.writeTo(out);
2286+
2287+
// check it deserializes ok
2288+
NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(ClusterModule.getNamedWriteables());
2289+
NamedWriteableAwareStreamInput in = new NamedWriteableAwareStreamInput(out.bytes().streamInput(), namedWriteableRegistry);
2290+
in.setTransportVersion(oldVersion);
2291+
ClusterState deserialisedClusterState = ClusterState.readFrom(in, null);
2292+
2293+
// check it matches the original object
2294+
Metadata deserializedMetadata = deserialisedClusterState.metadata();
2295+
assertThat(deserializedMetadata.projects(), aMapWithSize(1));
2296+
assertThat(deserializedMetadata.projects(), hasKey(ProjectId.DEFAULT));
2297+
2298+
assertThat(deserializedMetadata.getProject(ProjectId.DEFAULT).templates(), hasKey("template"));
2299+
assertThat(deserializedMetadata.getProject(ProjectId.DEFAULT).indices(), hasKey("index"));
2300+
2301+
assertThat(deserializedMetadata.reservedStateMetadata(), hasKey("file_settings"));
2302+
ReservedStateMetadata fileSettings = deserializedMetadata.reservedStateMetadata().get("file_settings");
2303+
assertThat(fileSettings.handlers(), aMapWithSize(1));
2304+
assertThat(fileSettings.handlers(), hasKey("settings"));
2305+
ReservedStateHandlerMetadata settingsHandlerMetadata = fileSettings.handlers().get("settings");
2306+
assertThat(settingsHandlerMetadata.keys(), equalTo(Set.of(PROJECT_SETTING.getKey(), PROJECT_SETTING2.getKey())));
2307+
}
22442308
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2745,8 +2745,7 @@ public void testToXContentMultiProject() throws IOException {
27452745
}
27462746
},
27472747
"data_stream_aliases": {}
2748-
},
2749-
"reserved_state": {}
2748+
}
27502749
}
27512750
""",
27522751
IndexVersion.current(),

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public void testSimpleJsonFromAndTo() throws IOException {
131131

132132
XContentBuilder builder = JsonXContent.contentBuilder();
133133
builder.startObject();
134-
ChunkedToXContent.wrapAsToXContent(Metadata.builder().put(project).build())
134+
ChunkedToXContent.wrapAsToXContent(Metadata.builder().put(project).put(reservedStateMetadata).put(reservedStateMetadata1).build())
135135
.toXContent(
136136
builder,
137137
new ToXContent.MapParams(Map.of("binary", "true", Metadata.CONTEXT_MODE_PARAM, Metadata.CONTEXT_MODE_GATEWAY))
@@ -280,8 +280,7 @@ public void testToXContentGateway_MultiProject() throws IOException {
280280
},
281281
"index-graveyard" : {
282282
"tombstones" : [ ]
283-
},
284-
"reserved_state" : { }
283+
}
285284
}
286285
],
287286
"reserved_state" : { }

0 commit comments

Comments
 (0)