Skip to content

Commit 6bc1452

Browse files
authored
Make repositories project aware (#128285)
Pass project-id explicitly to repository factory and make it part of the repository interface. Relates: ES-11839
1 parent 790be1e commit 6bc1452

File tree

68 files changed

+642
-118
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+642
-118
lines changed

modules/repository-azure/src/main/java/org/elasticsearch/repositories/azure/AzureRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.apache.logging.log4j.LogManager;
1313
import org.apache.logging.log4j.Logger;
14+
import org.elasticsearch.cluster.metadata.ProjectId;
1415
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
1516
import org.elasticsearch.cluster.service.ClusterService;
1617
import org.elasticsearch.common.Strings;
@@ -110,6 +111,7 @@ public static final class Repository {
110111
private final RepositoriesMetrics repositoriesMetrics;
111112

112113
public AzureRepository(
114+
final ProjectId projectId,
113115
final RepositoryMetadata metadata,
114116
final NamedXContentRegistry namedXContentRegistry,
115117
final AzureStorageService storageService,
@@ -119,6 +121,7 @@ public AzureRepository(
119121
final RepositoriesMetrics repositoriesMetrics
120122
) {
121123
super(
124+
projectId,
122125
metadata,
123126
namedXContentRegistry,
124127
clusterService,

modules/repository-azure/src/main/java/org/elasticsearch/repositories/azure/AzureRepositoryPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,11 @@ public Map<String, Repository.Factory> getRepositories(
6262
RecoverySettings recoverySettings,
6363
RepositoriesMetrics repositoriesMetrics
6464
) {
65-
return Collections.singletonMap(AzureRepository.TYPE, metadata -> {
65+
return Collections.singletonMap(AzureRepository.TYPE, (projectId, metadata) -> {
6666
AzureStorageService storageService = azureStoreService.get();
6767
assert storageService != null;
6868
return new AzureRepository(
69+
projectId,
6970
metadata,
7071
namedXContentRegistry,
7172
storageService,

modules/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureRepositorySettingsTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
package org.elasticsearch.repositories.azure;
1111

12+
import org.elasticsearch.cluster.metadata.ProjectId;
1213
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
1314
import org.elasticsearch.common.settings.ClusterSettings;
1415
import org.elasticsearch.common.settings.Settings;
@@ -23,6 +24,7 @@
2324
import org.elasticsearch.xcontent.NamedXContentRegistry;
2425

2526
import static org.elasticsearch.repositories.blobstore.BlobStoreRepository.READONLY_SETTING_KEY;
27+
import static org.hamcrest.Matchers.equalTo;
2628
import static org.hamcrest.Matchers.is;
2729
import static org.hamcrest.Matchers.nullValue;
2830
import static org.mockito.Mockito.mock;
@@ -35,7 +37,9 @@ private AzureRepository azureRepository(Settings settings) {
3537
.putList(Environment.PATH_DATA_SETTING.getKey(), tmpPaths())
3638
.put(settings)
3739
.build();
40+
final ProjectId projectId = randomProjectIdOrDefault();
3841
final AzureRepository azureRepository = new AzureRepository(
42+
projectId,
3943
new RepositoryMetadata("foo", "azure", internalSettings),
4044
NamedXContentRegistry.EMPTY,
4145
mock(AzureStorageService.class),
@@ -44,6 +48,7 @@ private AzureRepository azureRepository(Settings settings) {
4448
new RecoverySettings(settings, new ClusterSettings(settings, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)),
4549
RepositoriesMetrics.NOOP
4650
);
51+
assertThat(azureRepository.getProjectId(), equalTo(projectId));
4752
assertThat(azureRepository.getBlobStore(), is(nullValue()));
4853
return azureRepository;
4954
}

modules/repository-gcs/src/internalClusterTest/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,8 @@ public Map<String, Repository.Factory> getRepositories(
276276
) {
277277
return Collections.singletonMap(
278278
GoogleCloudStorageRepository.TYPE,
279-
metadata -> new GoogleCloudStorageRepository(
279+
(projectId, metadata) -> new GoogleCloudStorageRepository(
280+
projectId,
280281
metadata,
281282
registry,
282283
this.storageService,

modules/repository-gcs/src/main/java/org/elasticsearch/repositories/gcs/GoogleCloudStoragePlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ public Map<String, Repository.Factory> getRepositories(
5757
) {
5858
return Collections.singletonMap(
5959
GoogleCloudStorageRepository.TYPE,
60-
metadata -> new GoogleCloudStorageRepository(
60+
(projectId, metadata) -> new GoogleCloudStorageRepository(
61+
projectId,
6162
metadata,
6263
namedXContentRegistry,
6364
this.storageService,

modules/repository-gcs/src/main/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.apache.logging.log4j.LogManager;
1313
import org.apache.logging.log4j.Logger;
14+
import org.elasticsearch.cluster.metadata.ProjectId;
1415
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
1516
import org.elasticsearch.cluster.service.ClusterService;
1617
import org.elasticsearch.common.BackoffPolicy;
@@ -88,6 +89,7 @@ class GoogleCloudStorageRepository extends MeteredBlobStoreRepository {
8889
private final GcsRepositoryStatsCollector statsCollector;
8990

9091
GoogleCloudStorageRepository(
92+
final ProjectId projectId,
9193
final RepositoryMetadata metadata,
9294
final NamedXContentRegistry namedXContentRegistry,
9395
final GoogleCloudStorageService storageService,
@@ -97,6 +99,7 @@ class GoogleCloudStorageRepository extends MeteredBlobStoreRepository {
9799
final GcsRepositoryStatsCollector statsCollector
98100
) {
99101
super(
102+
projectId,
100103
metadata,
101104
namedXContentRegistry,
102105
clusterService,

modules/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStoragePluginTests.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,22 @@
99

1010
package org.elasticsearch.repositories.gcs;
1111

12+
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
13+
import org.elasticsearch.common.settings.ClusterSettings;
1214
import org.elasticsearch.common.settings.Setting;
1315
import org.elasticsearch.common.settings.Settings;
16+
import org.elasticsearch.common.util.MockBigArrays;
17+
import org.elasticsearch.indices.recovery.RecoverySettings;
18+
import org.elasticsearch.repositories.blobstore.BlobStoreTestUtil;
1419
import org.elasticsearch.test.ESTestCase;
20+
import org.elasticsearch.xcontent.NamedXContentRegistry;
1521
import org.junit.Assert;
1622

1723
import java.util.List;
1824

25+
import static org.hamcrest.Matchers.equalTo;
26+
import static org.mockito.Mockito.mock;
27+
1928
public class GoogleCloudStoragePluginTests extends ESTestCase {
2029

2130
public void testExposedSettings() {
@@ -37,4 +46,26 @@ public void testExposedSettings() {
3746
settings.stream().map(Setting::getKey).toList()
3847
);
3948
}
49+
50+
public void testRepositoryProjectId() {
51+
final var projectId = randomProjectIdOrDefault();
52+
final var repository = new GoogleCloudStorageRepository(
53+
projectId,
54+
new RepositoryMetadata(
55+
randomIdentifier(),
56+
GoogleCloudStorageRepository.TYPE,
57+
Settings.builder()
58+
.put(GoogleCloudStorageRepository.BUCKET.getKey(), randomIdentifier())
59+
.put(GoogleCloudStorageRepository.BASE_PATH.getKey(), randomIdentifier())
60+
.build()
61+
),
62+
NamedXContentRegistry.EMPTY,
63+
mock(GoogleCloudStorageService.class),
64+
BlobStoreTestUtil.mockClusterService(),
65+
MockBigArrays.NON_RECYCLING_INSTANCE,
66+
new RecoverySettings(Settings.EMPTY, new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)),
67+
mock(GcsRepositoryStatsCollector.class)
68+
);
69+
assertThat(repository.getProjectId(), equalTo(projectId));
70+
}
4071
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ public long absoluteTimeInMillis() {
147147
// construct our own repo instance so we can inject a threadpool that allows to control the passage of time
148148
try (
149149
var repository = new S3Repository(
150+
randomProjectIdOrDefault(),
150151
node().injector().getInstance(RepositoriesService.class).repository(TEST_REPO_NAME).getMetadata(),
151152
xContentRegistry(),
152153
node().injector().getInstance(PluginsService.class).filterPlugins(S3RepositoryPlugin.class).findFirst().get().getService(),

modules/repository-s3/src/internalClusterTest/java/org/elasticsearch/repositories/s3/S3BlobStoreRepositoryTests.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.logging.log4j.core.LogEvent;
2323
import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotResponse;
2424
import org.elasticsearch.action.support.broadcast.BroadcastResponse;
25+
import org.elasticsearch.cluster.metadata.ProjectId;
2526
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
2627
import org.elasticsearch.cluster.service.ClusterService;
2728
import org.elasticsearch.common.Strings;
@@ -598,14 +599,24 @@ public List<Setting<?>> getSettings() {
598599

599600
@Override
600601
protected S3Repository createRepository(
602+
ProjectId projectId,
601603
RepositoryMetadata metadata,
602604
NamedXContentRegistry registry,
603605
ClusterService clusterService,
604606
BigArrays bigArrays,
605607
RecoverySettings recoverySettings,
606608
S3RepositoriesMetrics s3RepositoriesMetrics
607609
) {
608-
return new S3Repository(metadata, registry, getService(), clusterService, bigArrays, recoverySettings, s3RepositoriesMetrics) {
610+
return new S3Repository(
611+
projectId,
612+
metadata,
613+
registry,
614+
getService(),
615+
clusterService,
616+
bigArrays,
617+
recoverySettings,
618+
s3RepositoriesMetrics
619+
) {
609620

610621
@Override
611622
public BlobStore blobStore() {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.logging.log4j.Logger;
2828
import org.elasticsearch.ElasticsearchException;
2929
import org.elasticsearch.ExceptionsHelper;
30+
import org.elasticsearch.cluster.metadata.ProjectId;
3031
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
3132
import org.elasticsearch.common.BackoffPolicy;
3233
import org.elasticsearch.common.Strings;
@@ -38,6 +39,7 @@
3839
import org.elasticsearch.common.blobstore.OperationPurpose;
3940
import org.elasticsearch.common.unit.ByteSizeValue;
4041
import org.elasticsearch.common.util.BigArrays;
42+
import org.elasticsearch.core.Nullable;
4143
import org.elasticsearch.core.TimeValue;
4244
import org.elasticsearch.repositories.RepositoriesMetrics;
4345
import org.elasticsearch.rest.RestStatus;
@@ -74,6 +76,8 @@ class S3BlobStore implements BlobStore {
7476

7577
private static final Logger logger = LogManager.getLogger(S3BlobStore.class);
7678

79+
@Nullable // if the blobstore is at the cluster level
80+
private final ProjectId projectId;
7781
private final S3Service service;
7882

7983
private final BigArrays bigArrays;
@@ -106,6 +110,7 @@ class S3BlobStore implements BlobStore {
106110
private final boolean addPurposeCustomQueryParameter;
107111

108112
S3BlobStore(
113+
@Nullable ProjectId projectId,
109114
S3Service service,
110115
String bucket,
111116
boolean serverSideEncryption,
@@ -119,6 +124,7 @@ class S3BlobStore implements BlobStore {
119124
S3RepositoriesMetrics s3RepositoriesMetrics,
120125
BackoffPolicy retryThrottledDeleteBackoffPolicy
121126
) {
127+
this.projectId = projectId;
122128
this.service = service;
123129
this.bigArrays = bigArrays;
124130
this.bucket = bucket;
@@ -257,6 +263,7 @@ public String toString() {
257263
}
258264

259265
public AmazonS3Reference clientReference() {
266+
// TODO: use service.client(ProjectId, RepositoryMetadata), see https://github.com/elastic/elasticsearch/pull/127631
260267
return service.client(repositoryMetadata);
261268
}
262269

0 commit comments

Comments
 (0)