Skip to content

Commit 7c54ef3

Browse files
Fix projects state registry filtering in GetClusterState API
1 parent 7f39b19 commit 7c54ef3

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

server/src/main/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateAction.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.elasticsearch.cluster.metadata.ProjectId;
3030
import org.elasticsearch.cluster.metadata.ProjectMetadata;
3131
import org.elasticsearch.cluster.project.ProjectResolver;
32+
import org.elasticsearch.cluster.project.ProjectStateRegistry;
3233
import org.elasticsearch.cluster.routing.GlobalRoutingTable;
3334
import org.elasticsearch.cluster.routing.RoutingTable;
3435
import org.elasticsearch.cluster.service.ClusterService;
@@ -162,13 +163,19 @@ private ClusterState filterClusterState(final ClusterState inputState) {
162163
}
163164
final Metadata.Builder mdBuilder = Metadata.builder(inputState.metadata());
164165
final GlobalRoutingTable.Builder rtBuilder = GlobalRoutingTable.builder(inputState.globalRoutingTable());
166+
final ProjectStateRegistry.Builder psBuilder = ProjectStateRegistry.builder(inputState);
165167
for (var projectId : metadata.projects().keySet()) {
166168
if (projectIds.contains(projectId) == false) {
167169
mdBuilder.removeProject(projectId);
168170
rtBuilder.removeProject(projectId);
171+
psBuilder.removeProject(projectId);
169172
}
170173
}
171-
return ClusterState.builder(inputState).metadata(mdBuilder.build()).routingTable(rtBuilder.build()).build();
174+
return ClusterState.builder(inputState)
175+
.metadata(mdBuilder.build())
176+
.routingTable(rtBuilder.build())
177+
.putCustom(ProjectStateRegistry.TYPE, psBuilder.build())
178+
.build();
172179
}
173180

174181
@SuppressForbidden(reason = "exposing ClusterState#compatibilityVersions requires reading them")

server/src/test/java/org/elasticsearch/action/admin/cluster/state/TransportClusterStateActionTests.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.elasticsearch.cluster.node.VersionInformation;
2323
import org.elasticsearch.cluster.project.DefaultProjectResolver;
2424
import org.elasticsearch.cluster.project.ProjectResolver;
25+
import org.elasticsearch.cluster.project.ProjectStateRegistry;
2526
import org.elasticsearch.cluster.project.TestProjectResolvers;
2627
import org.elasticsearch.cluster.routing.GlobalRoutingTableTestHelper;
2728
import org.elasticsearch.cluster.routing.RoutingTable;
@@ -169,6 +170,13 @@ public void testGetClusterStateForManyProjects() throws Exception {
169170
assertThat(routingTable, notNullValue());
170171
assertThat(routingTable.indicesRouting().keySet(), containsInAnyOrder(expectedIndices));
171172
}
173+
if (request.customs()) {
174+
ProjectStateRegistry projectStateRegistry = ProjectStateRegistry.get(response.getState());
175+
assertThat(projectStateRegistry.size(), equalTo(numberOfProjects));
176+
Settings projectSettings = projectStateRegistry.getProjectSettings(projectId);
177+
assertThat(projectSettings, notNullValue());
178+
assertThat(projectSettings.keySet(), contains("setting_1"));
179+
}
172180
}
173181
}
174182

@@ -194,6 +202,13 @@ private static void assertSingleProjectResponse(
194202
} else {
195203
assertThat(routingTables.get(projectId).indicesRouting(), anEmptyMap());
196204
}
205+
if (request.customs()) {
206+
ProjectStateRegistry projectStateRegistry = ProjectStateRegistry.get(response.getState());
207+
assertThat(projectStateRegistry.size(), equalTo(1));
208+
Settings projectSettings = projectStateRegistry.getProjectSettings(projectId);
209+
assertThat(projectSettings, notNullValue());
210+
assertThat(projectSettings.keySet(), contains("setting_1"));
211+
}
197212
}
198213

199214
private ClusterStateResponse executeAction(ProjectResolver projectResolver, ClusterStateRequest request, ClusterState state)
@@ -232,7 +247,7 @@ private static ClusterStateRequest buildRandomRequest(Set<String> indexNames) {
232247
request.nodes(randomBoolean());
233248
request.routingTable(randomBoolean());
234249
request.blocks(randomBoolean());
235-
request.customs(randomBoolean());
250+
request.customs(true);
236251
return request;
237252
}
238253

@@ -241,9 +256,15 @@ private static ClusterState buildClusterState(ProjectMetadata.Builder... project
241256
Arrays.stream(projects).forEach(metadataBuilder::put);
242257
final var metadata = metadataBuilder.build();
243258

244-
return ClusterState.builder(new ClusterName(randomAlphaOfLengthBetween(4, 12)))
259+
ClusterState.Builder csBuilder = ClusterState.builder(new ClusterName(randomAlphaOfLengthBetween(4, 12)));
260+
ProjectStateRegistry.Builder psBuilder = ProjectStateRegistry.builder();
261+
for (ProjectMetadata.Builder project : projects) {
262+
psBuilder.putProjectSettings(project.getId(), Settings.builder().put("setting_1", randomIdentifier()).build());
263+
}
264+
return csBuilder
245265
.metadata(metadata)
246266
.routingTable(GlobalRoutingTableTestHelper.buildRoutingTable(metadata, RoutingTable.Builder::addAsNew))
267+
.putCustom(ProjectStateRegistry.TYPE, psBuilder.build())
247268
.build();
248269
}
249270

0 commit comments

Comments
 (0)