From 6cb7b2d2f2d54520dfd14eb204a0ddcbb14cfed6 Mon Sep 17 00:00:00 2001 From: Sam Xiao Date: Fri, 27 Jun 2025 16:15:49 +0800 Subject: [PATCH] Make TransportPutDatabaseConfigurationAction project aware (#130063) --- ...ansportPutDatabaseConfigurationAction.java | 25 ++++++++++++------- ...rtPutDatabaseConfigurationActionTests.java | 14 ++++++----- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationAction.java b/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationAction.java index f7a9c2aff305..fb5dd4a616cf 100644 --- a/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationAction.java +++ b/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationAction.java @@ -20,7 +20,9 @@ import org.elasticsearch.cluster.ClusterStateTaskListener; import org.elasticsearch.cluster.SimpleBatchedExecutor; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.cluster.metadata.ProjectMetadata; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.MasterServiceTaskQueue; import org.elasticsearch.common.Priority; @@ -58,13 +60,15 @@ public class TransportPutDatabaseConfigurationAction extends TransportMasterNode }; private final MasterServiceTaskQueue updateDatabaseConfigurationTaskQueue; + private final ProjectResolver projectResolver; @Inject public TransportPutDatabaseConfigurationAction( TransportService transportService, ClusterService clusterService, ThreadPool threadPool, - ActionFilters actionFilters + ActionFilters actionFilters, + ProjectResolver projectResolver ) { super( PutDatabaseConfigurationAction.NAME, @@ -81,6 +85,7 @@ public class TransportPutDatabaseConfigurationAction extends TransportMasterNode Priority.NORMAL, UPDATE_TASK_EXECUTOR ); + this.projectResolver = projectResolver; } @Override @@ -89,7 +94,7 @@ public class TransportPutDatabaseConfigurationAction extends TransportMasterNode updateDatabaseConfigurationTaskQueue.submitTask( Strings.format("update-geoip-database-configuration-[%s]", id), - new UpdateDatabaseConfigurationTask(listener, request.getDatabase()), + new UpdateDatabaseConfigurationTask(projectResolver.getProjectId(), listener, request.getDatabase()), null ); } @@ -105,9 +110,9 @@ public class TransportPutDatabaseConfigurationAction extends TransportMasterNode } } - static void validatePrerequisites(DatabaseConfiguration database, ClusterState state) { + static void validatePrerequisites(ProjectId projectId, DatabaseConfiguration database, ClusterState state) { // we need to verify that the database represents a unique file (name) among the various databases for this same provider - IngestGeoIpMetadata geoIpMeta = state.metadata().getProject().custom(IngestGeoIpMetadata.TYPE, IngestGeoIpMetadata.EMPTY); + IngestGeoIpMetadata geoIpMeta = state.metadata().getProject(projectId).custom(IngestGeoIpMetadata.TYPE, IngestGeoIpMetadata.EMPTY); Optional sameName = geoIpMeta.getDatabases() .values() @@ -125,12 +130,14 @@ public class TransportPutDatabaseConfigurationAction extends TransportMasterNode }); } - private record UpdateDatabaseConfigurationTask(ActionListener listener, DatabaseConfiguration database) - implements - ClusterStateTaskListener { + private record UpdateDatabaseConfigurationTask( + ProjectId projectId, + ActionListener listener, + DatabaseConfiguration database + ) implements ClusterStateTaskListener { ClusterState execute(ClusterState currentState) throws Exception { - final var project = currentState.metadata().getProject(); + final var project = currentState.metadata().getProject(projectId); IngestGeoIpMetadata geoIpMeta = project.custom(IngestGeoIpMetadata.TYPE, IngestGeoIpMetadata.EMPTY); String id = database.id(); @@ -140,7 +147,7 @@ public class TransportPutDatabaseConfigurationAction extends TransportMasterNode return currentState; } - validatePrerequisites(database, currentState); + validatePrerequisites(projectId, database, currentState); Map databases = new HashMap<>(geoIpMeta.getDatabases()); databases.put( diff --git a/modules/ingest-geoip/src/test/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationActionTests.java b/modules/ingest-geoip/src/test/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationActionTests.java index d53dc69f0d11..9660844326a2 100644 --- a/modules/ingest-geoip/src/test/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationActionTests.java +++ b/modules/ingest-geoip/src/test/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationActionTests.java @@ -10,7 +10,8 @@ package org.elasticsearch.ingest.geoip.direct; import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectId; +import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.ingest.geoip.IngestGeoIpMetadata; import org.elasticsearch.test.ESTestCase; @@ -20,25 +21,26 @@ import java.util.Map; public class TransportPutDatabaseConfigurationActionTests extends ESTestCase { public void testValidatePrerequisites() { + ProjectId projectId = randomProjectIdOrDefault(); // Test that we reject two configurations with the same database name but different ids: String name = randomAlphaOfLengthBetween(1, 50); IngestGeoIpMetadata ingestGeoIpMetadata = randomIngestGeoIpMetadata(name); ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE) - .metadata(Metadata.builder(Metadata.EMPTY_METADATA).putCustom(IngestGeoIpMetadata.TYPE, ingestGeoIpMetadata)) + .putProjectMetadata(ProjectMetadata.builder(projectId).putCustom(IngestGeoIpMetadata.TYPE, ingestGeoIpMetadata).build()) .build(); DatabaseConfiguration databaseConfiguration = randomDatabaseConfiguration(randomIdentifier(), name); expectThrows( IllegalArgumentException.class, - () -> TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfiguration, state) + () -> TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfiguration, state) ); // Test that we do not reject two configurations with different database names: String differentName = randomValueOtherThan(name, () -> randomAlphaOfLengthBetween(1, 50)); DatabaseConfiguration databaseConfigurationForDifferentName = randomDatabaseConfiguration(randomIdentifier(), differentName); - TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfigurationForDifferentName, state); + TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfigurationForDifferentName, state); // Test that we do not reject a configuration if none already exists: - TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfiguration, ClusterState.EMPTY_STATE); + TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfiguration, ClusterState.EMPTY_STATE); // Test that we do not reject a configuration if one with the same database name AND id already exists: DatabaseConfiguration databaseConfigurationSameNameSameId = ingestGeoIpMetadata.getDatabases() @@ -46,7 +48,7 @@ public class TransportPutDatabaseConfigurationActionTests extends ESTestCase { .iterator() .next() .database(); - TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfigurationSameNameSameId, state); + TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfigurationSameNameSameId, state); } private IngestGeoIpMetadata randomIngestGeoIpMetadata(String name) {