Skip to content

Commit 6cb7b2d

Browse files
authored
Make TransportPutDatabaseConfigurationAction project aware (#130063)
1 parent 3200abc commit 6cb7b2d

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationAction.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import org.elasticsearch.cluster.SimpleBatchedExecutor;
2121
import org.elasticsearch.cluster.block.ClusterBlockException;
2222
import org.elasticsearch.cluster.block.ClusterBlockLevel;
23+
import org.elasticsearch.cluster.metadata.ProjectId;
2324
import org.elasticsearch.cluster.metadata.ProjectMetadata;
25+
import org.elasticsearch.cluster.project.ProjectResolver;
2426
import org.elasticsearch.cluster.service.ClusterService;
2527
import org.elasticsearch.cluster.service.MasterServiceTaskQueue;
2628
import org.elasticsearch.common.Priority;
@@ -58,13 +60,15 @@ public void taskSucceeded(UpdateDatabaseConfigurationTask task, Void unused) {
5860
};
5961

6062
private final MasterServiceTaskQueue<UpdateDatabaseConfigurationTask> updateDatabaseConfigurationTaskQueue;
63+
private final ProjectResolver projectResolver;
6164

6265
@Inject
6366
public TransportPutDatabaseConfigurationAction(
6467
TransportService transportService,
6568
ClusterService clusterService,
6669
ThreadPool threadPool,
67-
ActionFilters actionFilters
70+
ActionFilters actionFilters,
71+
ProjectResolver projectResolver
6872
) {
6973
super(
7074
PutDatabaseConfigurationAction.NAME,
@@ -81,6 +85,7 @@ public TransportPutDatabaseConfigurationAction(
8185
Priority.NORMAL,
8286
UPDATE_TASK_EXECUTOR
8387
);
88+
this.projectResolver = projectResolver;
8489
}
8590

8691
@Override
@@ -89,7 +94,7 @@ protected void masterOperation(Task task, Request request, ClusterState state, A
8994

9095
updateDatabaseConfigurationTaskQueue.submitTask(
9196
Strings.format("update-geoip-database-configuration-[%s]", id),
92-
new UpdateDatabaseConfigurationTask(listener, request.getDatabase()),
97+
new UpdateDatabaseConfigurationTask(projectResolver.getProjectId(), listener, request.getDatabase()),
9398
null
9499
);
95100
}
@@ -105,9 +110,9 @@ static boolean isNoopUpdate(@Nullable DatabaseConfigurationMetadata existingData
105110
}
106111
}
107112

108-
static void validatePrerequisites(DatabaseConfiguration database, ClusterState state) {
113+
static void validatePrerequisites(ProjectId projectId, DatabaseConfiguration database, ClusterState state) {
109114
// we need to verify that the database represents a unique file (name) among the various databases for this same provider
110-
IngestGeoIpMetadata geoIpMeta = state.metadata().getProject().custom(IngestGeoIpMetadata.TYPE, IngestGeoIpMetadata.EMPTY);
115+
IngestGeoIpMetadata geoIpMeta = state.metadata().getProject(projectId).custom(IngestGeoIpMetadata.TYPE, IngestGeoIpMetadata.EMPTY);
111116

112117
Optional<DatabaseConfiguration> sameName = geoIpMeta.getDatabases()
113118
.values()
@@ -125,12 +130,14 @@ static void validatePrerequisites(DatabaseConfiguration database, ClusterState s
125130
});
126131
}
127132

128-
private record UpdateDatabaseConfigurationTask(ActionListener<AcknowledgedResponse> listener, DatabaseConfiguration database)
129-
implements
130-
ClusterStateTaskListener {
133+
private record UpdateDatabaseConfigurationTask(
134+
ProjectId projectId,
135+
ActionListener<AcknowledgedResponse> listener,
136+
DatabaseConfiguration database
137+
) implements ClusterStateTaskListener {
131138

132139
ClusterState execute(ClusterState currentState) throws Exception {
133-
final var project = currentState.metadata().getProject();
140+
final var project = currentState.metadata().getProject(projectId);
134141
IngestGeoIpMetadata geoIpMeta = project.custom(IngestGeoIpMetadata.TYPE, IngestGeoIpMetadata.EMPTY);
135142

136143
String id = database.id();
@@ -140,7 +147,7 @@ ClusterState execute(ClusterState currentState) throws Exception {
140147
return currentState;
141148
}
142149

143-
validatePrerequisites(database, currentState);
150+
validatePrerequisites(projectId, database, currentState);
144151

145152
Map<String, DatabaseConfigurationMetadata> databases = new HashMap<>(geoIpMeta.getDatabases());
146153
databases.put(

modules/ingest-geoip/src/test/java/org/elasticsearch/ingest/geoip/direct/TransportPutDatabaseConfigurationActionTests.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
package org.elasticsearch.ingest.geoip.direct;
1111

1212
import org.elasticsearch.cluster.ClusterState;
13-
import org.elasticsearch.cluster.metadata.Metadata;
13+
import org.elasticsearch.cluster.metadata.ProjectId;
14+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1415
import org.elasticsearch.ingest.geoip.IngestGeoIpMetadata;
1516
import org.elasticsearch.test.ESTestCase;
1617

@@ -20,33 +21,34 @@
2021
public class TransportPutDatabaseConfigurationActionTests extends ESTestCase {
2122

2223
public void testValidatePrerequisites() {
24+
ProjectId projectId = randomProjectIdOrDefault();
2325
// Test that we reject two configurations with the same database name but different ids:
2426
String name = randomAlphaOfLengthBetween(1, 50);
2527
IngestGeoIpMetadata ingestGeoIpMetadata = randomIngestGeoIpMetadata(name);
2628
ClusterState state = ClusterState.builder(ClusterState.EMPTY_STATE)
27-
.metadata(Metadata.builder(Metadata.EMPTY_METADATA).putCustom(IngestGeoIpMetadata.TYPE, ingestGeoIpMetadata))
29+
.putProjectMetadata(ProjectMetadata.builder(projectId).putCustom(IngestGeoIpMetadata.TYPE, ingestGeoIpMetadata).build())
2830
.build();
2931
DatabaseConfiguration databaseConfiguration = randomDatabaseConfiguration(randomIdentifier(), name);
3032
expectThrows(
3133
IllegalArgumentException.class,
32-
() -> TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfiguration, state)
34+
() -> TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfiguration, state)
3335
);
3436

3537
// Test that we do not reject two configurations with different database names:
3638
String differentName = randomValueOtherThan(name, () -> randomAlphaOfLengthBetween(1, 50));
3739
DatabaseConfiguration databaseConfigurationForDifferentName = randomDatabaseConfiguration(randomIdentifier(), differentName);
38-
TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfigurationForDifferentName, state);
40+
TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfigurationForDifferentName, state);
3941

4042
// Test that we do not reject a configuration if none already exists:
41-
TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfiguration, ClusterState.EMPTY_STATE);
43+
TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfiguration, ClusterState.EMPTY_STATE);
4244

4345
// Test that we do not reject a configuration if one with the same database name AND id already exists:
4446
DatabaseConfiguration databaseConfigurationSameNameSameId = ingestGeoIpMetadata.getDatabases()
4547
.values()
4648
.iterator()
4749
.next()
4850
.database();
49-
TransportPutDatabaseConfigurationAction.validatePrerequisites(databaseConfigurationSameNameSameId, state);
51+
TransportPutDatabaseConfigurationAction.validatePrerequisites(projectId, databaseConfigurationSameNameSameId, state);
5052
}
5153

5254
private IngestGeoIpMetadata randomIngestGeoIpMetadata(String name) {

0 commit comments

Comments
 (0)