Skip to content

Commit cc092b1

Browse files
committed
Add support for OneZoneInfrequentAccess storage (#46436)
The `repository-s3` plugin has supported a storage class of `onezone_ia` since the SDK upgrade in #30723, but we do not test or document this fact. This commit adds this storage class to the docs and adds a test to ensure that the documented storage classes are all accepted by S3 too. Fixes #30474
1 parent 24c3a1d commit cc092b1

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

docs/plugins/repository-s3.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ include::repository-shared-settings.asciidoc[]
287287
`storage_class`::
288288

289289
Sets the S3 storage class for objects stored in the snapshot repository.
290-
Values may be `standard`, `reduced_redundancy`, `standard_ia`
290+
Values may be `standard`, `reduced_redundancy`, `standard_ia`, `onezone_ia`
291291
and `intelligent_tiering`. Defaults to `standard`.
292292
Changing this setting on an existing repository only affects the
293293
storage class for newly created objects, resulting in a mixed usage of

plugins/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3Repository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class S3Repository extends BlobStoreRepository {
130130

131131
/**
132132
* Sets the S3 storage class type for the backup files. Values may be standard, reduced_redundancy,
133-
* standard_ia and intelligent_tiering. Defaults to standard.
133+
* standard_ia, onezone_ia and intelligent_tiering. Defaults to standard.
134134
*/
135135
static final Setting<String> STORAGE_CLASS_SETTING = Setting.simpleString("storage_class");
136136

plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobStoreTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,18 @@ public void testInitStorageClass() {
7474
assertThat(S3BlobStore.initStorageClass(null), equalTo(StorageClass.Standard));
7575
assertThat(S3BlobStore.initStorageClass(""), equalTo(StorageClass.Standard));
7676

77-
// it should accept [standard, standard_ia, reduced_redundancy, intelligent_tiering]
77+
// it should accept [standard, standard_ia, onezone_ia, reduced_redundancy, intelligent_tiering]
7878
assertThat(S3BlobStore.initStorageClass("standard"), equalTo(StorageClass.Standard));
7979
assertThat(S3BlobStore.initStorageClass("standard_ia"), equalTo(StorageClass.StandardInfrequentAccess));
80+
assertThat(S3BlobStore.initStorageClass("onezone_ia"), equalTo(StorageClass.OneZoneInfrequentAccess));
8081
assertThat(S3BlobStore.initStorageClass("reduced_redundancy"), equalTo(StorageClass.ReducedRedundancy));
8182
assertThat(S3BlobStore.initStorageClass("intelligent_tiering"), equalTo(StorageClass.IntelligentTiering));
8283
}
8384

8485
public void testCaseInsensitiveStorageClass() {
8586
assertThat(S3BlobStore.initStorageClass("sTandaRd"), equalTo(StorageClass.Standard));
8687
assertThat(S3BlobStore.initStorageClass("sTandaRd_Ia"), equalTo(StorageClass.StandardInfrequentAccess));
88+
assertThat(S3BlobStore.initStorageClass("oNeZoNe_iA"), equalTo(StorageClass.OneZoneInfrequentAccess));
8789
assertThat(S3BlobStore.initStorageClass("reduCED_redundancy"), equalTo(StorageClass.ReducedRedundancy));
8890
assertThat(S3BlobStore.initStorageClass("intelLigeNt_tieriNG"), equalTo(StorageClass.IntelligentTiering));
8991
}

plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3RepositoryThirdPartyTests.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,15 @@ protected void createRepository(String repoName) {
6363
.put("base_path", System.getProperty("test.s3.base", "testpath"));
6464
final String endpoint = System.getProperty("test.s3.endpoint");
6565
if (endpoint != null) {
66-
settings = settings.put("endpoint", endpoint);
66+
settings.put("endpoint", endpoint);
67+
} else {
68+
// only test different storage classes when running against the default endpoint, i.e. a genuine S3 service
69+
if (randomBoolean()) {
70+
final String storageClass
71+
= randomFrom("standard", "reduced_redundancy", "standard_ia", "onezone_ia", "intelligent_tiering");
72+
logger.info("--> using storage_class [{}]", storageClass);
73+
settings.put("storage_class", storageClass);
74+
}
6775
}
6876
AcknowledgedResponse putRepositoryResponse = client().admin().cluster().preparePutRepository("test-repo")
6977
.setType("s3")

0 commit comments

Comments
 (0)