Skip to content

Commit 92b32b5

Browse files
authored
Passing in project-id when creating s3 client (elastic#129301)
Enables creating different s3 clients for different projects Relates: elastic#127631
1 parent a0b8737 commit 92b32b5

File tree

8 files changed

+24
-37
lines changed

8 files changed

+24
-37
lines changed

modules/repository-s3/qa/third-party/src/test/java/org/elasticsearch/repositories/s3/S3RepositoryThirdPartyTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope;
1919

2020
import org.elasticsearch.action.support.master.AcknowledgedResponse;
21+
import org.elasticsearch.cluster.metadata.ProjectId;
2122
import org.elasticsearch.cluster.service.ClusterService;
2223
import org.elasticsearch.common.blobstore.OptionalBytesReference;
2324
import org.elasticsearch.common.bytes.BytesArray;
@@ -147,7 +148,7 @@ public long absoluteTimeInMillis() {
147148
// construct our own repo instance so we can inject a threadpool that allows to control the passage of time
148149
try (
149150
var repository = new S3Repository(
150-
randomProjectIdOrDefault(),
151+
ProjectId.DEFAULT,
151152
node().injector().getInstance(RepositoriesService.class).repository(TEST_REPO_NAME).getMetadata(),
152153
xContentRegistry(),
153154
node().injector().getInstance(PluginsService.class).filterPlugins(S3RepositoryPlugin.class).findFirst().get().getService(),

modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3BlobStore.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class S3BlobStore implements BlobStore {
140140
this.bulkDeletionBatchSize = S3Repository.DELETION_BATCH_SIZE_SETTING.get(repositoryMetadata.settings());
141141
this.retryThrottledDeleteBackoffPolicy = retryThrottledDeleteBackoffPolicy;
142142
this.getRegisterRetryDelay = S3Repository.GET_REGISTER_RETRY_DELAY.get(repositoryMetadata.settings());
143-
this.addPurposeCustomQueryParameter = service.settings(repositoryMetadata).addPurposeCustomQueryParameter;
143+
this.addPurposeCustomQueryParameter = service.settings(projectId, repositoryMetadata).addPurposeCustomQueryParameter;
144144
}
145145

146146
MetricPublisher getMetricPublisher(Operation operation, OperationPurpose purpose) {
@@ -263,12 +263,11 @@ public String toString() {
263263
}
264264

265265
public AmazonS3Reference clientReference() {
266-
// TODO: use service.client(ProjectId, RepositoryMetadata), see https://github.com/elastic/elasticsearch/pull/127631
267-
return service.client(repositoryMetadata);
266+
return service.client(projectId, repositoryMetadata);
268267
}
269268

270269
final int getMaxRetries() {
271-
return service.settings(repositoryMetadata).maxRetries;
270+
return service.settings(projectId, repositoryMetadata).maxRetries;
272271
}
273272

274273
public String bucket() {
@@ -441,7 +440,7 @@ private static DeleteObjectsRequest bulkDelete(OperationPurpose purpose, S3BlobS
441440

442441
@Override
443442
public void close() throws IOException {
444-
service.onBlobStoreClose();
443+
service.onBlobStoreClose(projectId);
445444
}
446445

447446
@Override

modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3Service.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import org.elasticsearch.common.settings.Setting;
5050
import org.elasticsearch.common.settings.Settings;
5151
import org.elasticsearch.common.util.concurrent.RunOnce;
52-
import org.elasticsearch.core.FixForMultiProject;
5352
import org.elasticsearch.core.Nullable;
5453
import org.elasticsearch.core.Releasable;
5554
import org.elasticsearch.core.Releasables;
@@ -157,15 +156,6 @@ public synchronized void refreshAndClearCache(Map<String, S3ClientSettings> clie
157156
s3ClientsManager.refreshAndClearCacheForClusterClients(clientsSettings);
158157
}
159158

160-
/**
161-
* Attempts to retrieve a client by its repository metadata and settings from the cache.
162-
* If the client does not exist it will be created.
163-
*/
164-
@FixForMultiProject(description = "can be removed once blobstore is project aware")
165-
public AmazonS3Reference client(RepositoryMetadata repositoryMetadata) {
166-
return client(ProjectId.DEFAULT, repositoryMetadata);
167-
}
168-
169159
/**
170160
* Attempts to retrieve either a cluster or project client from the client manager. Throws if project-id or
171161
* the client name does not exist. The client maybe initialized lazily.
@@ -196,11 +186,6 @@ private AmazonS3Reference buildClientReference(final S3ClientSettings clientSett
196186
}
197187
}
198188

199-
@FixForMultiProject(description = "can be removed once blobstore is project aware")
200-
S3ClientSettings settings(RepositoryMetadata repositoryMetadata) {
201-
return settings(ProjectId.DEFAULT, repositoryMetadata);
202-
}
203-
204189
S3ClientSettings settings(@Nullable ProjectId projectId, RepositoryMetadata repositoryMetadata) {
205190
return s3ClientsManager.settingsForClient(effectiveProjectId(projectId), repositoryMetadata);
206191
}
@@ -420,11 +405,6 @@ static AwsCredentialsProvider buildCredentials(
420405
}
421406
}
422407

423-
@FixForMultiProject(description = "can be removed once blobstore is project aware")
424-
public void onBlobStoreClose() {
425-
onBlobStoreClose(ProjectId.DEFAULT);
426-
}
427-
428408
/**
429409
* Release clients for the specified project.
430410
* @param projectId The project associated with the client, or null if the client is cluster level

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AwsS3ServiceImplTests.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.logging.log4j.Logger;
2323
import org.apache.logging.log4j.util.Supplier;
24+
import org.elasticsearch.cluster.metadata.ProjectId;
2425
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
2526
import org.elasticsearch.cluster.project.TestProjectResolvers;
2627
import org.elasticsearch.common.settings.MockSecureSettings;
@@ -246,7 +247,10 @@ public void testEndPointAndRegionOverrides() throws IOException {
246247
s3Service.start();
247248
final String endpointOverride = "http://first";
248249
final Settings settings = Settings.builder().put("endpoint", endpointOverride).build();
249-
final AmazonS3Reference reference = s3Service.client(new RepositoryMetadata("first", "s3", settings));
250+
final AmazonS3Reference reference = s3Service.client(
251+
randomFrom(ProjectId.DEFAULT, null),
252+
new RepositoryMetadata("first", "s3", settings)
253+
);
250254

251255
assertEquals(endpointOverride, reference.client().serviceClientConfiguration().endpointOverride().get().toString());
252256
assertEquals("es-test-region", reference.client().serviceClientConfiguration().region().toString());

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobContainerRetriesTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.http.conn.DnsResolver;
2222
import org.apache.logging.log4j.Level;
2323
import org.elasticsearch.ExceptionsHelper;
24+
import org.elasticsearch.cluster.metadata.ProjectId;
2425
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
2526
import org.elasticsearch.cluster.project.TestProjectResolvers;
2627
import org.elasticsearch.common.BackoffPolicy;
@@ -239,7 +240,7 @@ protected BlobContainer createBlobContainer(
239240
final RepositoryMetadata repositoryMetadata = new RepositoryMetadata("repository", S3Repository.TYPE, repositorySettings.build());
240241

241242
final S3BlobStore s3BlobStore = new S3BlobStore(
242-
randomProjectIdOrDefault(),
243+
ProjectId.DEFAULT,
243244
service,
244245
"bucket",
245246
S3Repository.SERVER_SIDE_ENCRYPTION_SETTING.getDefault(Settings.EMPTY),

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3RepositoryTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.elasticsearch.common.unit.ByteSizeValue;
2525
import org.elasticsearch.common.util.MockBigArrays;
2626
import org.elasticsearch.common.util.concurrent.DeterministicTaskQueue;
27+
import org.elasticsearch.core.Nullable;
2728
import org.elasticsearch.env.Environment;
2829
import org.elasticsearch.indices.recovery.RecoverySettings;
2930
import org.elasticsearch.repositories.RepositoryException;
@@ -71,7 +72,7 @@ private static class DummyS3Service extends S3Service {
7172
}
7273

7374
@Override
74-
public AmazonS3Reference client(RepositoryMetadata repositoryMetadata) {
75+
public AmazonS3Reference client(@Nullable ProjectId projectId, RepositoryMetadata repositoryMetadata) {
7576
return new AmazonS3Reference(new DummyS3Client(), mock(SdkHttpClient.class));
7677
}
7778

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3ServiceTests.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import software.amazon.awssdk.services.s3.model.S3Exception;
2020

2121
import org.apache.logging.log4j.Level;
22+
import org.elasticsearch.cluster.metadata.ProjectId;
2223
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
2324
import org.elasticsearch.cluster.project.TestProjectResolvers;
2425
import org.elasticsearch.common.Strings;
@@ -53,17 +54,17 @@ public void testCachedClientsAreReleased() throws IOException {
5354
final Settings settings = Settings.builder().put("endpoint", "http://first").build();
5455
final RepositoryMetadata metadata1 = new RepositoryMetadata("first", "s3", settings);
5556
final RepositoryMetadata metadata2 = new RepositoryMetadata("second", "s3", settings);
56-
final S3ClientSettings clientSettings = s3Service.settings(metadata2);
57-
final S3ClientSettings otherClientSettings = s3Service.settings(metadata2);
57+
final S3ClientSettings clientSettings = s3Service.settings(ProjectId.DEFAULT, metadata2);
58+
final S3ClientSettings otherClientSettings = s3Service.settings(ProjectId.DEFAULT, metadata2);
5859
assertSame(clientSettings, otherClientSettings);
59-
final AmazonS3Reference reference = s3Service.client(metadata1);
60+
final AmazonS3Reference reference = s3Service.client(randomFrom(ProjectId.DEFAULT, null), metadata1);
6061
reference.close();
61-
s3Service.onBlobStoreClose();
62-
final AmazonS3Reference referenceReloaded = s3Service.client(metadata1);
62+
s3Service.onBlobStoreClose(ProjectId.DEFAULT);
63+
final AmazonS3Reference referenceReloaded = s3Service.client(randomFrom(ProjectId.DEFAULT, null), metadata1);
6364
assertNotSame(referenceReloaded, reference);
6465
referenceReloaded.close();
65-
s3Service.onBlobStoreClose();
66-
final S3ClientSettings clientSettingsReloaded = s3Service.settings(metadata1);
66+
s3Service.onBlobStoreClose(ProjectId.DEFAULT);
67+
final S3ClientSettings clientSettingsReloaded = s3Service.settings(ProjectId.DEFAULT, metadata1);
6768
assertNotSame(clientSettings, clientSettingsReloaded);
6869
s3Service.close();
6970
}

test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2743,7 +2743,7 @@ public static void runInParallel(int numberOfTasks, IntConsumer taskFactory) {
27432743
future.run();
27442744
} else {
27452745
threads[i] = new Thread(future);
2746-
threads[i].setName("runInParallel-T#" + i);
2746+
threads[i].setName("TEST-runInParallel-T#" + i);
27472747
threads[i].start();
27482748
}
27492749
}

0 commit comments

Comments
 (0)