1313import org .elasticsearch .action .FailedNodeException ;
1414import org .elasticsearch .action .support .ActionFilters ;
1515import org .elasticsearch .action .support .nodes .TransportNodesAction ;
16+ import org .elasticsearch .cluster .metadata .ProjectMetadata ;
1617import org .elasticsearch .cluster .node .DiscoveryNode ;
18+ import org .elasticsearch .cluster .project .ProjectResolver ;
1719import org .elasticsearch .cluster .service .ClusterService ;
1820import org .elasticsearch .common .io .stream .StreamInput ;
1921import org .elasticsearch .common .regex .Regex ;
2022import org .elasticsearch .ingest .geoip .DatabaseNodeService ;
23+ import org .elasticsearch .ingest .geoip .GeoIpDownloaderTaskExecutor ;
2124import org .elasticsearch .ingest .geoip .GeoIpTaskState ;
2225import org .elasticsearch .ingest .geoip .IngestGeoIpMetadata ;
2326import org .elasticsearch .injection .guice .Inject ;
@@ -48,14 +51,16 @@ public class TransportGetDatabaseConfigurationAction extends TransportNodesActio
4851 List <DatabaseConfigurationMetadata >> {
4952
5053 private final DatabaseNodeService databaseNodeService ;
54+ private final ProjectResolver projectResolver ;
5155
5256 @ Inject
5357 public TransportGetDatabaseConfigurationAction (
5458 TransportService transportService ,
5559 ClusterService clusterService ,
5660 ThreadPool threadPool ,
5761 ActionFilters actionFilters ,
58- DatabaseNodeService databaseNodeService
62+ DatabaseNodeService databaseNodeService ,
63+ ProjectResolver projectResolver
5964 ) {
6065 super (
6166 GetDatabaseConfigurationAction .NAME ,
@@ -66,6 +71,7 @@ public TransportGetDatabaseConfigurationAction(
6671 threadPool .executor (ThreadPool .Names .MANAGEMENT )
6772 );
6873 this .databaseNodeService = databaseNodeService ;
74+ this .projectResolver = projectResolver ;
6975 }
7076
7177 protected List <DatabaseConfigurationMetadata > createActionContext (Task task , GetDatabaseConfigurationAction .Request request ) {
@@ -82,25 +88,29 @@ protected List<DatabaseConfigurationMetadata> createActionContext(Task task, Get
8288 "wildcard only supports a single value, please use comma-separated values or a single wildcard value"
8389 );
8490 }
85-
8691 List <DatabaseConfigurationMetadata > results = new ArrayList <>();
87- PersistentTasksCustomMetadata tasksMetadata = PersistentTasksCustomMetadata .getPersistentTasksCustomMetadata (
88- clusterService .state ()
89- );
92+ ProjectMetadata projectMetadata = projectResolver .getProjectMetadata (clusterService .state ());
93+ PersistentTasksCustomMetadata tasksMetadata = PersistentTasksCustomMetadata .get (projectMetadata );
94+ String geoIpTaskId = GeoIpDownloaderTaskExecutor .getTaskId (projectMetadata .id (), projectResolver .supportsMultipleProjects ());
95+
9096 for (String id : ids ) {
91- results .addAll (getWebDatabases (tasksMetadata , id ));
92- results .addAll (getMaxmindDatabases (clusterService , id ));
97+ results .addAll (getWebDatabases (geoIpTaskId , tasksMetadata , id ));
98+ results .addAll (getMaxmindDatabases (projectMetadata , id ));
9399 }
94100 return results ;
95101 }
96102
97103 /*
98104 * This returns read-only database information about the databases managed by the standard downloader
99105 */
100- private static Collection <DatabaseConfigurationMetadata > getWebDatabases (PersistentTasksCustomMetadata tasksMetadata , String id ) {
106+ private static Collection <DatabaseConfigurationMetadata > getWebDatabases (
107+ String geoIpTaskId ,
108+ PersistentTasksCustomMetadata tasksMetadata ,
109+ String id
110+ ) {
101111 List <DatabaseConfigurationMetadata > webDatabases = new ArrayList <>();
102112 if (tasksMetadata != null ) {
103- PersistentTasksCustomMetadata .PersistentTask <?> maybeGeoIpTask = tasksMetadata .getTask ("geoip-downloader" );
113+ PersistentTasksCustomMetadata .PersistentTask <?> maybeGeoIpTask = tasksMetadata .getTask (geoIpTaskId );
104114 if (maybeGeoIpTask != null ) {
105115 GeoIpTaskState geoIpTaskState = (GeoIpTaskState ) maybeGeoIpTask .getState ();
106116 if (geoIpTaskState != null ) {
@@ -137,12 +147,9 @@ private static String getDatabaseNameForFileName(String databaseFileName) {
137147 /*
138148 * This returns information about databases that are downloaded from maxmind.
139149 */
140- private static Collection <DatabaseConfigurationMetadata > getMaxmindDatabases (ClusterService clusterService , String id ) {
150+ private static Collection <DatabaseConfigurationMetadata > getMaxmindDatabases (ProjectMetadata projectMetadata , String id ) {
141151 List <DatabaseConfigurationMetadata > maxmindDatabases = new ArrayList <>();
142- final IngestGeoIpMetadata geoIpMeta = clusterService .state ()
143- .metadata ()
144- .getProject ()
145- .custom (IngestGeoIpMetadata .TYPE , IngestGeoIpMetadata .EMPTY );
152+ final IngestGeoIpMetadata geoIpMeta = projectMetadata .custom (IngestGeoIpMetadata .TYPE , IngestGeoIpMetadata .EMPTY );
146153 if (Regex .isSimpleMatchPattern (id )) {
147154 for (Map .Entry <String , DatabaseConfigurationMetadata > entry : geoIpMeta .getDatabases ().entrySet ()) {
148155 if (Regex .simpleMatch (id , entry .getKey ())) {
0 commit comments