1919import org .elasticsearch .cluster .metadata .Metadata ;
2020import org .elasticsearch .cluster .metadata .ProjectId ;
2121import org .elasticsearch .cluster .metadata .ProjectMetadata ;
22+ import org .elasticsearch .cluster .metadata .ReservedStateHandlerMetadata ;
23+ import org .elasticsearch .cluster .metadata .ReservedStateMetadata ;
2224import org .elasticsearch .cluster .node .VersionInformation ;
2325import org .elasticsearch .cluster .project .DefaultProjectResolver ;
2426import org .elasticsearch .cluster .project .ProjectResolver ;
@@ -94,7 +96,7 @@ public void testGetClusterStateWithDefaultProjectOnly() throws Exception {
9496 final ProjectResolver projectResolver = DefaultProjectResolver .INSTANCE ;
9597
9698 final Set <String > indexNames = randomSet (1 , 8 , () -> randomAlphaOfLengthBetween (4 , 12 ));
97- final ClusterStateRequest request = buildRandomRequest (indexNames );
99+ final ClusterStateRequest request = buildRandomRequest (indexNames , false );
98100 final String [] expectedIndices = getExpectedIndices (request , indexNames );
99101
100102 final ProjectId projectId = Metadata .DEFAULT_PROJECT_ID ;
@@ -112,7 +114,7 @@ public void testGetClusterStateForOneProjectOfMany() throws Exception {
112114 final ProjectId projectId = randomUniqueProjectId ();
113115
114116 final ProjectResolver projectResolver = TestProjectResolvers .singleProject (projectId );
115- final ClusterStateRequest request = buildRandomRequest (indexNames );
117+ final ClusterStateRequest request = buildRandomRequest (indexNames , false );
116118 final String [] expectedIndices = getExpectedIndices (request , indexNames );
117119
118120 final int numberOfProjects = randomIntBetween (2 , 5 );
@@ -141,7 +143,7 @@ public void testGetClusterStateForManyProjects() throws Exception {
141143 final ClusterState state = buildClusterState (projects );
142144
143145 final ProjectResolver projectResolver = TestProjectResolvers .allProjects ();
144- final ClusterStateRequest request = buildRandomRequest (indexNames );
146+ final ClusterStateRequest request = buildRandomRequest (indexNames , true );
145147 final Set <String > requestedIndices = Set .of (getExpectedIndices (request , indexNames ));
146148
147149 final ClusterStateResponse response = executeAction (projectResolver , request , state );
@@ -190,6 +192,22 @@ private static void assertSingleProjectResponse(
190192 assertThat (metadata .projects ().keySet (), contains (projectId ));
191193 if (request .metadata ()) {
192194 assertThat (metadata .getProject (projectId ).indices ().keySet (), containsInAnyOrder (expectedIndices ));
195+
196+ if (expectedIndices .length == 0 ) {
197+ Map <String , ReservedStateMetadata > reservedStateMetadataMap = metadata .reservedStateMetadata ();
198+ assertThat (reservedStateMetadataMap , aMapWithSize (1 ));
199+ ReservedStateMetadata fileSettings = reservedStateMetadataMap .get ("file_settings" );
200+ assertNotNull (fileSettings );
201+ assertThat (fileSettings .version (), equalTo (43L ));
202+ Map <String , ReservedStateHandlerMetadata > handlers = fileSettings .handlers ();
203+ assertThat (handlers , aMapWithSize (2 ));
204+ ReservedStateHandlerMetadata clusterSettingsHandler = handlers .get ("cluster_settings" );
205+ assertNotNull (clusterSettingsHandler );
206+ assertThat (clusterSettingsHandler .keys (), containsInAnyOrder ("setting_1" , "setting_2" ));
207+ ReservedStateHandlerMetadata projectSettingsHandler = handlers .get ("project_settings" );
208+ assertNotNull (projectSettingsHandler );
209+ assertThat (projectSettingsHandler .keys (), containsInAnyOrder ("setting_1" , "setting_2" ));
210+ }
193211 } else {
194212 assertThat (metadata .getProject (projectId ).indices (), anEmptyMap ());
195213 }
@@ -235,7 +253,7 @@ private static String[] getExpectedIndices(ClusterStateRequest request, Set<Stri
235253 }
236254 }
237255
238- private static ClusterStateRequest buildRandomRequest (Set <String > indexNames ) {
256+ private static ClusterStateRequest buildRandomRequest (Set <String > indexNames , boolean multipleProjects ) {
239257 final ClusterStateRequest request = new ClusterStateRequest (TEST_REQUEST_TIMEOUT );
240258 if (randomBoolean ()) {
241259 final int numberSelectedIndices = randomIntBetween (1 , indexNames .size ());
@@ -248,18 +266,29 @@ private static ClusterStateRequest buildRandomRequest(Set<String> indexNames) {
248266 request .routingTable (randomBoolean ());
249267 request .blocks (randomBoolean ());
250268 request .customs (true );
269+ request .multiproject (multipleProjects );
251270 return request ;
252271 }
253272
254273 private static ClusterState buildClusterState (ProjectMetadata .Builder ... projects ) {
255274 final Metadata .Builder metadataBuilder = Metadata .builder ();
275+ metadataBuilder .put (ReservedStateMetadata .builder ("file_settings" )
276+ .version (43L )
277+ .putHandler (new ReservedStateHandlerMetadata ("cluster_settings" , Set .of ("setting_1" , "setting_2" )))
278+ .build ()
279+ );
256280 Arrays .stream (projects ).forEach (metadataBuilder ::put );
257281 final var metadata = metadataBuilder .build ();
258282
259283 ClusterState .Builder csBuilder = ClusterState .builder (new ClusterName (randomAlphaOfLengthBetween (4 , 12 )));
260284 ProjectStateRegistry .Builder psBuilder = ProjectStateRegistry .builder ();
261285 for (ProjectMetadata .Builder project : projects ) {
262- psBuilder .putProjectSettings (project .getId (), Settings .builder ().put ("setting_1" , randomIdentifier ()).build ());
286+ psBuilder
287+ .putReservedStateMetadata (project .getId (), ReservedStateMetadata .builder ("file_settings" )
288+ .version (43L )
289+ .putHandler (new ReservedStateHandlerMetadata ("project_settings" , Set .of ("setting_1" )))
290+ .build ())
291+ .putProjectSettings (project .getId (), Settings .builder ().put ("setting_1" , randomIdentifier ()).build ());
263292 }
264293 return csBuilder .metadata (metadata )
265294 .routingTable (GlobalRoutingTableTestHelper .buildRoutingTable (metadata , RoutingTable .Builder ::addAsNew ))
0 commit comments