Date: Wed, 18 Oct 2023 14:39:20 -0400
Subject: [PATCH 08/14] feat: add Autoclass v2.1 support (#2258)
---
.../cloud/storage/ApiaryConversions.java | 10 +++
.../com/google/cloud/storage/BucketInfo.java | 79 ++++++++++++++++---
.../google/cloud/storage/GrpcConversions.java | 14 ++++
.../google/cloud/storage/it/ITBucketTest.java | 47 +++++++++++
4 files changed, 137 insertions(+), 13 deletions(-)
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryConversions.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryConversions.java
index 2fd275e8ba..7226267e31 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryConversions.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryConversions.java
@@ -484,6 +484,11 @@ private Bucket.Autoclass autoclassEncode(Autoclass from) {
Bucket.Autoclass to = new Bucket.Autoclass();
ifNonNull(from.getEnabled(), to::setEnabled);
ifNonNull(from.getToggleTime(), dateTimeCodec::encode, to::setToggleTime);
+ ifNonNull(from.getTerminalStorageClass(), StorageClass::toString, to::setTerminalStorageClass);
+ ifNonNull(
+ from.getTerminalStorageClassUpdateTime(),
+ dateTimeCodec::encode,
+ to::setTerminalStorageClassUpdateTime);
return to;
}
@@ -491,6 +496,11 @@ private Autoclass autoclassDecode(Bucket.Autoclass from) {
Autoclass.Builder to = Autoclass.newBuilder();
to.setEnabled(from.getEnabled());
ifNonNull(from.getToggleTime(), dateTimeCodec::decode, to::setToggleTime);
+ ifNonNull(from.getTerminalStorageClass(), StorageClass::valueOf, to::setTerminalStorageClass);
+ ifNonNull(
+ from.getTerminalStorageClassUpdateTime(),
+ dateTimeCodec::decode,
+ to::setTerminalStorageClassUpdateTime);
return to.build();
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
index bb7780c010..a4d5262917 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
@@ -344,11 +344,26 @@ public String toString() {
}
}
+ /**
+ * Configuration for the Autoclass settings of a bucket.
+ *
+ * @see https://cloud.google.com/storage/docs/autoclass
+ */
public static final class Autoclass implements Serializable {
private static final long serialVersionUID = -2378172222188072439L;
- private Boolean enabled;
- private OffsetDateTime toggleTime;
+ private final Boolean enabled;
+ private final OffsetDateTime toggleTime;
+ private final StorageClass terminalStorageClass;
+ private final OffsetDateTime terminalStorageClassUpdateTime;
+
+ private Autoclass(Builder builder) {
+ this.enabled = builder.enabled;
+ this.toggleTime = builder.toggleTime;
+ this.terminalStorageClass = builder.terminalStorageClass;
+ this.terminalStorageClassUpdateTime = builder.terminalStorageClassUpdateTime;
+ }
public Boolean getEnabled() {
return enabled;
@@ -358,6 +373,14 @@ public OffsetDateTime getToggleTime() {
return toggleTime;
}
+ public StorageClass getTerminalStorageClass() {
+ return terminalStorageClass;
+ }
+
+ public OffsetDateTime getTerminalStorageClassUpdateTime() {
+ return terminalStorageClassUpdateTime;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -366,13 +389,18 @@ public boolean equals(Object o) {
if (!(o instanceof Autoclass)) {
return false;
}
- Autoclass that = (Autoclass) o;
- return Objects.equals(enabled, that.enabled) && Objects.equals(toggleTime, that.toggleTime);
+ Autoclass autoclass = (Autoclass) o;
+ return Objects.equals(enabled, autoclass.enabled)
+ && Objects.equals(toggleTime, autoclass.toggleTime)
+ && Objects.equals(terminalStorageClass, autoclass.terminalStorageClass)
+ && Objects.equals(
+ terminalStorageClassUpdateTime, autoclass.terminalStorageClassUpdateTime);
}
@Override
public int hashCode() {
- return Objects.hash(enabled, toggleTime);
+ return Objects.hash(
+ enabled, toggleTime, terminalStorageClass, terminalStorageClassUpdateTime);
}
@Override
@@ -380,27 +408,28 @@ public String toString() {
return MoreObjects.toStringHelper(this)
.add("enabled", enabled)
.add("toggleTime", toggleTime)
+ .add("terminalStorageClass", terminalStorageClass)
+ .add("terminalStorageClassUpdateTime", terminalStorageClassUpdateTime)
.toString();
}
- private Autoclass() {}
-
- private Autoclass(Builder builder) {
- this.enabled = builder.enabled;
- this.toggleTime = builder.toggleTime;
- }
-
public static Builder newBuilder() {
return new Builder();
}
public Builder toBuilder() {
- return newBuilder().setEnabled(enabled).setToggleTime(toggleTime);
+ return newBuilder()
+ .setEnabled(enabled)
+ .setToggleTime(toggleTime)
+ .setTerminalStorageClass(terminalStorageClass)
+ .setTerminalStorageClassUpdateTime(terminalStorageClassUpdateTime);
}
public static final class Builder {
private Boolean enabled;
private OffsetDateTime toggleTime;
+ private StorageClass terminalStorageClass;
+ private OffsetDateTime terminalStorageClassUpdateTime;
/**
* Sets whether Autoclass is enabled for this bucket. Currently, autoclass can only be enabled
@@ -421,6 +450,30 @@ Builder setToggleTime(OffsetDateTime toggleTime) {
return this;
}
+ /**
+ * When set to {@link StorageClass#NEARLINE}, Autoclass restricts transitions between Standard
+ * and Nearline storage classes only.
+ *
+ * When set to {@link StorageClass#ARCHIVE}, Autoclass allows transitions to Coldline and
+ * Archive as well.
+ *
+ *
Only valid values are {@code NEARLINE} and {@code ARCHIVE}.
+ */
+ public Builder setTerminalStorageClass(StorageClass terminalStorageClass) {
+ this.terminalStorageClass = terminalStorageClass;
+ return this;
+ }
+
+ /**
+ * The time at which Autoclass terminal storage class was last updated for this bucket.
+ *
+ *
This is auto populated when the feature is enabled.
+ */
+ Builder setTerminalStorageClassUpdateTime(OffsetDateTime terminalStorageClassUpdateTime) {
+ this.terminalStorageClassUpdateTime = terminalStorageClassUpdateTime;
+ return this;
+ }
+
public Autoclass build() {
return new Autoclass(this);
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcConversions.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcConversions.java
index 38766b9461..9ddf229c5c 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcConversions.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcConversions.java
@@ -565,6 +565,15 @@ private BucketInfo.Autoclass autoclassDecode(Bucket.Autoclass from) {
BucketInfo.Autoclass.Builder to = BucketInfo.Autoclass.newBuilder();
to.setEnabled(from.getEnabled());
ifNonNull(from.getToggleTime(), timestampCodec::decode, to::setToggleTime);
+
+ String terminalStorageClass = from.getTerminalStorageClass();
+ if (!terminalStorageClass.isEmpty()) {
+ to.setTerminalStorageClass(StorageClass.valueOf(terminalStorageClass));
+ }
+ ifNonNull(
+ from.getTerminalStorageClassUpdateTime(),
+ timestampCodec::decode,
+ to::setTerminalStorageClassUpdateTime);
return to.build();
}
@@ -572,6 +581,11 @@ private Bucket.Autoclass autoclassEncode(BucketInfo.Autoclass from) {
Bucket.Autoclass.Builder to = Bucket.Autoclass.newBuilder();
ifNonNull(from.getEnabled(), to::setEnabled);
ifNonNull(from.getToggleTime(), timestampCodec::encode, to::setToggleTime);
+ ifNonNull(from.getTerminalStorageClass(), StorageClass::toString, to::setTerminalStorageClass);
+ ifNonNull(
+ from.getTerminalStorageClassUpdateTime(),
+ timestampCodec::encode,
+ to::setTerminalStorageClassUpdateTime);
return to.build();
}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITBucketTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITBucketTest.java
index 240f5d6ca1..f5b2b00c53 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITBucketTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITBucketTest.java
@@ -42,6 +42,7 @@
import com.google.cloud.storage.Storage.BucketGetOption;
import com.google.cloud.storage.Storage.BucketListOption;
import com.google.cloud.storage.Storage.BucketTargetOption;
+import com.google.cloud.storage.StorageClass;
import com.google.cloud.storage.TransportCompatibility.Transport;
import com.google.cloud.storage.it.runner.StorageITRunner;
import com.google.cloud.storage.it.runner.annotations.Backend;
@@ -58,6 +59,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.stream.StreamSupport;
import org.junit.Ignore;
import org.junit.Test;
@@ -417,6 +419,51 @@ public void testCreateBucketWithAutoclass() {
}
}
+ @Test
+ public void testCreateBucketWithAutoclass_ARCHIVE() throws Exception {
+ String bucketName = generator.randomBucketName();
+ Autoclass autoclass =
+ Autoclass.newBuilder()
+ .setEnabled(true)
+ .setTerminalStorageClass(StorageClass.ARCHIVE)
+ .build();
+ BucketInfo info = BucketInfo.newBuilder(bucketName).setAutoclass(autoclass).build();
+ try (TemporaryBucket tmpb =
+ TemporaryBucket.newBuilder().setStorage(storage).setBucketInfo(info).build()) {
+ BucketInfo remoteBucket = tmpb.getBucket();
+
+ Autoclass remoteBucketAutoclass = remoteBucket.getAutoclass();
+ assertThat(remoteBucketAutoclass).isNotNull();
+ assertThat(remoteBucketAutoclass.getEnabled()).isTrue();
+ assertThat(remoteBucketAutoclass.getToggleTime()).isNotNull();
+ assertThat(remoteBucketAutoclass.getTerminalStorageClassUpdateTime()).isNotNull();
+ assertThat(remoteBucketAutoclass.getTerminalStorageClass()).isEqualTo(StorageClass.ARCHIVE);
+
+ Page bucketPage = storage.list(BucketListOption.prefix(bucketName));
+ ImmutableList buckets = ImmutableList.copyOf(bucketPage.iterateAll());
+
+ Optional first =
+ buckets.stream().filter(b -> bucketName.equals(b.getName())).findFirst();
+
+ assertThat(first.isPresent()).isTrue();
+ assertThat(first.get().getAutoclass().getTerminalStorageClass())
+ .isEqualTo(StorageClass.ARCHIVE);
+
+ BucketInfo disabled =
+ remoteBucket
+ .toBuilder()
+ .setAutoclass(Autoclass.newBuilder().setEnabled(false).build())
+ .build();
+ Bucket updated = storage.update(disabled, BucketTargetOption.metagenerationMatch());
+
+ Autoclass updatedAutoclass = updated.getAutoclass();
+ assertThat(updatedAutoclass.getEnabled()).isFalse();
+ assertThat(updatedAutoclass.getTerminalStorageClass()).isNull();
+
+ assertThat(updatedAutoclass).isNotEqualTo(remoteBucketAutoclass);
+ }
+ }
+
@Test
public void testUpdateBucket_noModification() throws Exception {
String bucketName = generator.randomBucketName();
From d1b26d57e1ed9488edb085d99a4653c1cf9e72d7 Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Wed, 18 Oct 2023 12:44:06 -0700
Subject: [PATCH 09/14] chore: track customization in templates (#1876) (#2261)
Source-Link: https://github.com/googleapis/synthtool/commit/a79241941a00783e0da86853c455e899567c3ccb
Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-java:latest@sha256:d0a8eb7ffc63ddce4c63191373d6e99d5385516423c396de207dedf2b6db7427
Co-authored-by: Owl Bot
---
.github/.OwlBot.lock.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index fa335912bd..cd91b662b9 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -13,5 +13,5 @@
# limitations under the License.
docker:
image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest
- digest: sha256:3a95f1b9b1102865ca551b76be51d2bdb850900c4db2f6d79269e7af81ac8f84
-# created: 2023-07-27T18:37:44.251188775Z
+ digest: sha256:d0a8eb7ffc63ddce4c63191373d6e99d5385516423c396de207dedf2b6db7427
+# created: 2023-10-17T17:33:29.360983119Z
From 9336e7473ffa022df5b75c108ea5b3e28f2d010d Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Wed, 18 Oct 2023 21:44:55 +0200
Subject: [PATCH 10/14] test(deps): update cross product test dependencies
(#2264)
---
google-cloud-storage/pom.xml | 2 +-
pom.xml | 2 +-
samples/install-without-bom/pom.xml | 2 +-
samples/native-image-sample/pom.xml | 2 +-
samples/snapshot/pom.xml | 2 +-
samples/snippets/pom.xml | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml
index 82f615668f..af68d6668e 100644
--- a/google-cloud-storage/pom.xml
+++ b/google-cloud-storage/pom.xml
@@ -16,7 +16,7 @@
google-cloud-storage
- 1.107.6
+ 1.107.7
5.10.0
diff --git a/pom.xml b/pom.xml
index f2161ecd2b..4f1214879e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,7 +86,7 @@
com.google.cloud
google-cloud-pubsub
- 1.125.6
+ 1.125.7
test
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 550ee287bc..bff873fee1 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -61,7 +61,7 @@
com.google.cloud
google-cloud-pubsub
- 1.125.6
+ 1.125.7
test
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 94d65fb763..1f0c60fc44 100644
--- a/samples/native-image-sample/pom.xml
+++ b/samples/native-image-sample/pom.xml
@@ -61,7 +61,7 @@
com.google.cloud
google-cloud-pubsub
- 1.125.6
+ 1.125.7
test