diff --git a/google-cloud-examples/pom.xml b/google-cloud-examples/pom.xml
index b1e30e9ee05f..516acdea9d44 100644
--- a/google-cloud-examples/pom.xml
+++ b/google-cloud-examples/pom.xml
@@ -76,7 +76,7 @@
com.google.cloud
google-cloud-storage
- 2.2.3
+ 2.3.0
com.google.apis
diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/CreateBucketWithTurboReplication.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/CreateBucketWithTurboReplication.java
new file mode 100644
index 000000000000..5407612e1111
--- /dev/null
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/CreateBucketWithTurboReplication.java
@@ -0,0 +1,40 @@
+package com.google.cloud.examples.storage.buckets;
+
+// [START storage_create_bucket_turbo_replication]
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.Rpo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+
+public class CreateBucketWithTurboReplication {
+ public static void createBucketWithTurboReplication(
+ String projectId, String bucketName, String location) {
+ // The ID of your GCP project
+ // String projectId = "your-project-id";
+
+ // The ID to give your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ // The dual-region location to create your bucket in
+ // String location = "NAM4"
+
+ Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
+
+ Bucket bucket =
+ storage.create(
+ BucketInfo.newBuilder(bucketName)
+ .setLocation(location)
+ .setRpo(Rpo.ASYNC_TURBO)
+ .build());
+
+ System.out.println(
+ "Created bucket "
+ + bucket.getName()
+ + " in "
+ + bucket.getLocation()
+ + " with RPO setting"
+ + bucket.getRpo());
+ }
+}
+// [END storage_create_bucket_turbo_replication]
diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/GetBucketRpo.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/GetBucketRpo.java
new file mode 100644
index 000000000000..e86a92b85c5c
--- /dev/null
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/GetBucketRpo.java
@@ -0,0 +1,23 @@
+package com.google.cloud.examples.storage.buckets;
+
+// [START storage_get_rpo]
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+
+public class GetBucketRpo {
+ public static void getBucketRpo(String projectId, String bucketName) {
+ // The ID of your GCP project
+ // String projectId = "your-project-id";
+
+ // The ID of your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
+ Bucket bucket = storage.get(bucketName);
+ String rpo = bucket.getRpo().toString();
+
+ System.out.println("The RPO setting of bucket " + bucketName + " is " + rpo);
+ }
+}
+// [END storage_get_rpo]
diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/SetAsyncTurboRpo.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/SetAsyncTurboRpo.java
new file mode 100644
index 000000000000..a7dbc84a250e
--- /dev/null
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/SetAsyncTurboRpo.java
@@ -0,0 +1,25 @@
+package com.google.cloud.examples.storage.buckets;
+
+// [START storage_set_rpo_async_turbo]
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.Rpo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+
+public class SetAsyncTurboRpo {
+ public static void setAsyncTurboRpo(String projectId, String bucketName) {
+ // The ID of your GCP project
+ // String projectId = "your-project-id";
+
+ // The ID of your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
+ Bucket bucket = storage.get(bucketName);
+
+ bucket.toBuilder().setRpo(Rpo.ASYNC_TURBO).build().update();
+
+ System.out.println("Turbo replication was enabled for " + bucketName);
+ }
+}
+// [END storage_set_rpo_async_turbo]
diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/SetDefaultRpo.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/SetDefaultRpo.java
new file mode 100644
index 000000000000..3aaefc4a4d63
--- /dev/null
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/buckets/SetDefaultRpo.java
@@ -0,0 +1,25 @@
+package com.google.cloud.examples.storage.buckets;
+
+// [START storage_set_rpo_default]
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.Rpo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+
+public class SetDefaultRpo {
+ public static void setDefaultRpo(String projectId, String bucketName) {
+ // The ID of your GCP project
+ // String projectId = "your-project-id";
+
+ // The ID of your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
+ Bucket bucket = storage.get(bucketName);
+
+ bucket.toBuilder().setRpo(Rpo.DEFAULT).build().update();
+
+ System.out.println("Replication was set to default for " + bucketName);
+ }
+}
+// [END storage_set_rpo_default]
diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBucketSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBucketSnippets.java
index f9dbeb285fd1..c3aab55ac4d5 100644
--- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBucketSnippets.java
+++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBucketSnippets.java
@@ -28,6 +28,7 @@
import com.google.cloud.examples.storage.buckets.ConfigureBucketCors;
import com.google.cloud.examples.storage.buckets.CreateBucket;
import com.google.cloud.examples.storage.buckets.CreateBucketWithStorageClassAndLocation;
+import com.google.cloud.examples.storage.buckets.CreateBucketWithTurboReplication;
import com.google.cloud.examples.storage.buckets.DeleteBucket;
import com.google.cloud.examples.storage.buckets.DisableBucketVersioning;
import com.google.cloud.examples.storage.buckets.DisableLifecycleManagement;
@@ -36,6 +37,7 @@
import com.google.cloud.examples.storage.buckets.EnableLifecycleManagement;
import com.google.cloud.examples.storage.buckets.EnableRequesterPays;
import com.google.cloud.examples.storage.buckets.GetBucketMetadata;
+import com.google.cloud.examples.storage.buckets.GetBucketRpo;
import com.google.cloud.examples.storage.buckets.GetPublicAccessPrevention;
import com.google.cloud.examples.storage.buckets.ListBucketIamMembers;
import com.google.cloud.examples.storage.buckets.ListBuckets;
@@ -45,7 +47,9 @@
import com.google.cloud.examples.storage.buckets.RemoveBucketIamConditionalBinding;
import com.google.cloud.examples.storage.buckets.RemoveBucketIamMember;
import com.google.cloud.examples.storage.buckets.RemoveBucketLabel;
+import com.google.cloud.examples.storage.buckets.SetAsyncTurboRpo;
import com.google.cloud.examples.storage.buckets.SetBucketWebsiteInfo;
+import com.google.cloud.examples.storage.buckets.SetDefaultRpo;
import com.google.cloud.examples.storage.buckets.SetPublicAccessPreventionEnforced;
import com.google.cloud.examples.storage.buckets.SetPublicAccessPreventionInherited;
import com.google.cloud.examples.storage.objects.DownloadRequesterPaysObject;
@@ -520,4 +524,33 @@ public void testRequesterPays() throws Exception {
DisableRequesterPays.disableRequesterPays(PROJECT_ID, BUCKET);
assertFalse(storage.get(BUCKET).requesterPays());
}
+
+ @Test
+ public void testRpo() throws Exception {
+ String rpoBucket = RemoteStorageHelper.generateBucketName();
+ try {
+ CreateBucketWithTurboReplication.createBucketWithTurboReplication(
+ PROJECT_ID, rpoBucket, "NAM4");
+ Bucket bucket = storage.get(rpoBucket);
+ assertEquals("ASYNC_TURBO", bucket.getRpo().toString());
+
+ SetDefaultRpo.setDefaultRpo(PROJECT_ID, rpoBucket);
+ bucket = storage.get(rpoBucket);
+ assertEquals("DEFAULT", bucket.getRpo().toString());
+
+ SetAsyncTurboRpo.setAsyncTurboRpo(PROJECT_ID, rpoBucket);
+ bucket = storage.get(rpoBucket);
+ assertEquals("ASYNC_TURBO", bucket.getRpo().toString());
+
+ PrintStream standardOut = System.out;
+ final ByteArrayOutputStream snippetOutputCapture = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(snippetOutputCapture));
+ GetBucketRpo.getBucketRpo(PROJECT_ID, rpoBucket);
+ String snippetOutput = snippetOutputCapture.toString();
+ System.setOut(standardOut);
+ assertTrue(snippetOutput.contains("ASYNC_TURBO"));
+ } finally {
+ storage.delete(rpoBucket);
+ }
+ }
}