| 
29 | 29 | import org.elasticsearch.common.logging.HeaderWarning;  | 
30 | 30 | import org.elasticsearch.core.CheckedConsumer;  | 
31 | 31 | import org.elasticsearch.core.CheckedRunnable;  | 
 | 32 | +import org.elasticsearch.core.FixForMultiProject;  | 
32 | 33 | import org.elasticsearch.core.IOUtils;  | 
 | 34 | +import org.elasticsearch.core.NotMultiProjectCapable;  | 
33 | 35 | import org.elasticsearch.core.Nullable;  | 
34 | 36 | import org.elasticsearch.core.Tuple;  | 
35 | 37 | import org.elasticsearch.env.Environment;  | 
@@ -289,15 +291,12 @@ void checkDatabases(ClusterState state) {  | 
289 | 291 |         }  | 
290 | 292 | 
 
  | 
291 | 293 |         // Optimization: only load the .geoip_databases for projects that are allocated to this node  | 
292 |  | -        for (ProjectId projectId : state.metadata().projects().keySet()) {  | 
293 |  | -            checkDatabases(state.projectState(projectId));  | 
294 |  | -        }  | 
 | 294 | +        state.forEachProject(this::checkDatabases);  | 
295 | 295 |     }  | 
296 | 296 | 
 
  | 
297 | 297 |     void checkDatabases(ProjectState projectState) {  | 
298 | 298 |         ProjectId projectId = projectState.projectId();  | 
299 | 299 |         ProjectMetadata projectMetadata = projectState.metadata();  | 
300 |  | -        ClusterState clusterState = projectState.cluster();  | 
301 | 300 |         PersistentTasksCustomMetadata persistentTasks = projectMetadata.custom(PersistentTasksCustomMetadata.TYPE);  | 
302 | 301 |         if (persistentTasks == null) {  | 
303 | 302 |             logger.trace("Not checking databases for project [{}] because persistent tasks are null", projectId);  | 
@@ -343,7 +342,10 @@ void checkDatabases(ProjectState projectState) {  | 
343 | 342 | 
 
  | 
344 | 343 |         // process the geoip task state for the enterprise geoip downloader  | 
345 | 344 |         {  | 
346 |  | -            EnterpriseGeoIpTaskState taskState = getEnterpriseGeoIpTaskState(projectState.cluster());  | 
 | 345 | +            @NotMultiProjectCapable(description = "Enterprise GeoIP not supported in serverless")  | 
 | 346 | +            EnterpriseGeoIpTaskState taskState = getEnterpriseGeoIpTaskState(  | 
 | 347 | +                projectState.cluster().metadata().getProject(ProjectId.DEFAULT)  | 
 | 348 | +            );  | 
347 | 349 |             if (taskState == null) {  | 
348 | 350 |                 // Note: an empty state will purge stale entries in databases map  | 
349 | 351 |                 taskState = EnterpriseGeoIpTaskState.EMPTY;  | 
 | 
0 commit comments