1616import org .elasticsearch .client .internal .Client ;
1717import org .elasticsearch .client .internal .OriginSettingClient ;
1818import org .elasticsearch .cluster .ClusterState ;
19+ import org .elasticsearch .cluster .ProjectState ;
1920import org .elasticsearch .cluster .metadata .IndexAbstraction ;
2021import org .elasticsearch .cluster .metadata .ProjectId ;
2122import org .elasticsearch .cluster .metadata .ProjectMetadata ;
@@ -288,13 +289,15 @@ void checkDatabases(ClusterState state) {
288289 }
289290
290291 // Optimization: only load the .geoip_databases for projects that are allocated to this node
291- for (ProjectMetadata projectMetadata : state .metadata ().projects ().values ()) {
292- checkDatabases (state , projectMetadata );
292+ for (ProjectId projectId : state .metadata ().projects ().keySet ()) {
293+ checkDatabases (state . projectState ( projectId ) );
293294 }
294295 }
295296
296- void checkDatabases (ClusterState state , ProjectMetadata projectMetadata ) {
297- ProjectId projectId = projectMetadata .id ();
297+ void checkDatabases (ProjectState projectState ) {
298+ ProjectId projectId = projectState .projectId ();
299+ ProjectMetadata projectMetadata = projectState .metadata ();
300+ ClusterState clusterState = clusterService .state ();
298301 PersistentTasksCustomMetadata persistentTasks = projectMetadata .custom (PersistentTasksCustomMetadata .TYPE );
299302 if (persistentTasks == null ) {
300303 logger .trace ("Not checking databases for project [{}] because persistent tasks are null" , projectId );
@@ -308,7 +311,7 @@ void checkDatabases(ClusterState state, ProjectMetadata projectMetadata) {
308311 } else {
309312 // regardless of whether DATABASES_INDEX is an alias, resolve it to a concrete index
310313 Index databasesIndex = databasesAbstraction .getWriteIndex ();
311- IndexRoutingTable databasesIndexRT = state .routingTable (projectId ).index (databasesIndex );
314+ IndexRoutingTable databasesIndexRT = clusterState .routingTable (projectId ).index (databasesIndex );
312315 if (databasesIndexRT == null || databasesIndexRT .allPrimaryShardsActive () == false ) {
313316 logger .trace (
314317 "Not checking databases because geoip databases index does not have all active primary shards for" + " project [{}]" ,
@@ -332,15 +335,15 @@ void checkDatabases(ClusterState state, ProjectMetadata projectMetadata) {
332335 taskState .getDatabases ()
333336 .entrySet ()
334337 .stream ()
335- .filter (e -> e .getValue ().isNewEnough (state .getMetadata ().settings ()))
338+ .filter (e -> e .getValue ().isNewEnough (clusterState .getMetadata ().settings ()))
336339 .map (entry -> Tuple .tuple (entry .getKey (), entry .getValue ()))
337340 .toList ()
338341 );
339342 }
340343
341344 // process the geoip task state for the enterprise geoip downloader
342345 {
343- EnterpriseGeoIpTaskState taskState = getEnterpriseGeoIpTaskState (state );
346+ EnterpriseGeoIpTaskState taskState = getEnterpriseGeoIpTaskState (clusterState );
344347 if (taskState == null ) {
345348 // Note: an empty state will purge stale entries in databases map
346349 taskState = EnterpriseGeoIpTaskState .EMPTY ;
@@ -349,7 +352,7 @@ void checkDatabases(ClusterState state, ProjectMetadata projectMetadata) {
349352 taskState .getDatabases ()
350353 .entrySet ()
351354 .stream ()
352- .filter (e -> e .getValue ().isNewEnough (state .getMetadata ().settings ()))
355+ .filter (e -> e .getValue ().isNewEnough (clusterState .getMetadata ().settings ()))
353356 .map (entry -> Tuple .tuple (entry .getKey (), entry .getValue ()))
354357 .toList ()
355358 );
0 commit comments