+ responseObserver) {
+ io.grpc.stub.ClientCalls.asyncUnaryCall(
+ getChannel().newCall(getTestIamPermissionsMethod(), getCallOptions()),
+ request,
+ responseObserver);
+ }
}
/**
@@ -2292,6 +2534,57 @@ public com.google.storage.control.v2.IntelligenceConfig updateOrganizationIntell
return io.grpc.stub.ClientCalls.blockingUnaryCall(
getChannel(), getUpdateOrganizationIntelligenceConfigMethod(), getCallOptions(), request);
}
+
+ /**
+ *
+ *
+ *
+ * Gets the IAM policy for a specified bucket.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getGetIamPolicyMethod(), getCallOptions(), request);
+ }
+
+ /**
+ *
+ *
+ *
+ * Updates an IAM policy for the specified bucket.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getSetIamPolicyMethod(), getCallOptions(), request);
+ }
+
+ /**
+ *
+ *
+ *
+ * Tests a set of permissions on the given bucket, object, or managed folder
+ * to see which, if any, are held by the caller.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket,
+ * `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions(
+ com.google.iam.v1.TestIamPermissionsRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getTestIamPermissionsMethod(), getCallOptions(), request);
+ }
}
/**
@@ -2622,6 +2915,57 @@ public com.google.storage.control.v2.IntelligenceConfig updateOrganizationIntell
return io.grpc.stub.ClientCalls.blockingUnaryCall(
getChannel(), getUpdateOrganizationIntelligenceConfigMethod(), getCallOptions(), request);
}
+
+ /**
+ *
+ *
+ *
+ * Gets the IAM policy for a specified bucket.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.iam.v1.Policy getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getGetIamPolicyMethod(), getCallOptions(), request);
+ }
+
+ /**
+ *
+ *
+ *
+ * Updates an IAM policy for the specified bucket.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.iam.v1.Policy setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getSetIamPolicyMethod(), getCallOptions(), request);
+ }
+
+ /**
+ *
+ *
+ *
+ * Tests a set of permissions on the given bucket, object, or managed folder
+ * to see which, if any, are held by the caller.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket,
+ * `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions(
+ com.google.iam.v1.TestIamPermissionsRequest request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getTestIamPermissionsMethod(), getCallOptions(), request);
+ }
}
/**
@@ -2978,6 +3322,60 @@ protected StorageControlFutureStub build(
getChannel().newCall(getUpdateOrganizationIntelligenceConfigMethod(), getCallOptions()),
request);
}
+
+ /**
+ *
+ *
+ *
+ * Gets the IAM policy for a specified bucket.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.common.util.concurrent.ListenableFuture
+ getIamPolicy(com.google.iam.v1.GetIamPolicyRequest request) {
+ return io.grpc.stub.ClientCalls.futureUnaryCall(
+ getChannel().newCall(getGetIamPolicyMethod(), getCallOptions()), request);
+ }
+
+ /**
+ *
+ *
+ *
+ * Updates an IAM policy for the specified bucket.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.common.util.concurrent.ListenableFuture
+ setIamPolicy(com.google.iam.v1.SetIamPolicyRequest request) {
+ return io.grpc.stub.ClientCalls.futureUnaryCall(
+ getChannel().newCall(getSetIamPolicyMethod(), getCallOptions()), request);
+ }
+
+ /**
+ *
+ *
+ *
+ * Tests a set of permissions on the given bucket, object, or managed folder
+ * to see which, if any, are held by the caller.
+ * The `resource` field in the request should be
+ * `projects/_/buckets/{bucket}` for a bucket,
+ * `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+ * `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ * for a managed folder.
+ *
+ */
+ public com.google.common.util.concurrent.ListenableFuture<
+ com.google.iam.v1.TestIamPermissionsResponse>
+ testIamPermissions(com.google.iam.v1.TestIamPermissionsRequest request) {
+ return io.grpc.stub.ClientCalls.futureUnaryCall(
+ getChannel().newCall(getTestIamPermissionsMethod(), getCallOptions()), request);
+ }
}
private static final int METHODID_CREATE_FOLDER = 0;
@@ -3003,6 +3401,9 @@ protected StorageControlFutureStub build(
private static final int METHODID_UPDATE_FOLDER_INTELLIGENCE_CONFIG = 20;
private static final int METHODID_GET_ORGANIZATION_INTELLIGENCE_CONFIG = 21;
private static final int METHODID_UPDATE_ORGANIZATION_INTELLIGENCE_CONFIG = 22;
+ private static final int METHODID_GET_IAM_POLICY = 23;
+ private static final int METHODID_SET_IAM_POLICY = 24;
+ private static final int METHODID_TEST_IAM_PERMISSIONS = 25;
private static final class MethodHandlers
implements io.grpc.stub.ServerCalls.UnaryMethod,
@@ -3154,6 +3555,22 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv
(io.grpc.stub.StreamObserver)
responseObserver);
break;
+ case METHODID_GET_IAM_POLICY:
+ serviceImpl.getIamPolicy(
+ (com.google.iam.v1.GetIamPolicyRequest) request,
+ (io.grpc.stub.StreamObserver) responseObserver);
+ break;
+ case METHODID_SET_IAM_POLICY:
+ serviceImpl.setIamPolicy(
+ (com.google.iam.v1.SetIamPolicyRequest) request,
+ (io.grpc.stub.StreamObserver) responseObserver);
+ break;
+ case METHODID_TEST_IAM_PERMISSIONS:
+ serviceImpl.testIamPermissions(
+ (com.google.iam.v1.TestIamPermissionsRequest) request,
+ (io.grpc.stub.StreamObserver)
+ responseObserver);
+ break;
default:
throw new AssertionError();
}
@@ -3326,6 +3743,23 @@ public static final io.grpc.ServerServiceDefinition bindService(AsyncService ser
com.google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest,
com.google.storage.control.v2.IntelligenceConfig>(
service, METHODID_UPDATE_ORGANIZATION_INTELLIGENCE_CONFIG)))
+ .addMethod(
+ getGetIamPolicyMethod(),
+ io.grpc.stub.ServerCalls.asyncUnaryCall(
+ new MethodHandlers(
+ service, METHODID_GET_IAM_POLICY)))
+ .addMethod(
+ getSetIamPolicyMethod(),
+ io.grpc.stub.ServerCalls.asyncUnaryCall(
+ new MethodHandlers(
+ service, METHODID_SET_IAM_POLICY)))
+ .addMethod(
+ getTestIamPermissionsMethod(),
+ io.grpc.stub.ServerCalls.asyncUnaryCall(
+ new MethodHandlers<
+ com.google.iam.v1.TestIamPermissionsRequest,
+ com.google.iam.v1.TestIamPermissionsResponse>(
+ service, METHODID_TEST_IAM_PERMISSIONS)))
.build();
}
@@ -3400,6 +3834,9 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() {
.addMethod(getUpdateFolderIntelligenceConfigMethod())
.addMethod(getGetOrganizationIntelligenceConfigMethod())
.addMethod(getUpdateOrganizationIntelligenceConfigMethod())
+ .addMethod(getGetIamPolicyMethod())
+ .addMethod(getSetIamPolicyMethod())
+ .addMethod(getTestIamPermissionsMethod())
.build();
}
}
diff --git a/grpc-google-cloud-storage-v2/pom.xml b/grpc-google-cloud-storage-v2/pom.xml
index cdcb8e6b11..b1729bff6a 100644
--- a/grpc-google-cloud-storage-v2/pom.xml
+++ b/grpc-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-storage-v2
- 2.57.0
+ 2.58.0
grpc-google-cloud-storage-v2
GRPC library for grpc-google-cloud-storage-v2
com.google.cloud
google-cloud-storage-parent
- 2.57.0
+ 2.58.0
diff --git a/pom.xml b/pom.xml
index 5f901d6d55..b14e256786 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-storage-parent
pom
- 2.57.0
+ 2.58.0
Storage Parent
https://github.com/googleapis/java-storage
@@ -14,7 +14,7 @@
com.google.cloud
sdk-platform-java-config
- 3.52.1
+ 3.52.2
@@ -82,7 +82,7 @@
com.google.cloud
google-cloud-storage
- 2.57.0
+ 2.58.0
com.google.apis
@@ -92,7 +92,7 @@
com.google.cloud
google-cloud-pubsub
- 1.141.3
+ 1.141.4
test
@@ -104,32 +104,32 @@
com.google.api.grpc
proto-google-cloud-storage-v2
- 2.57.0
+ 2.58.0
com.google.api.grpc
grpc-google-cloud-storage-v2
- 2.57.0
+ 2.58.0
com.google.api.grpc
gapic-google-cloud-storage-v2
- 2.57.0
+ 2.58.0
com.google.api.grpc
grpc-google-cloud-storage-control-v2
- 2.57.0
+ 2.58.0
com.google.api.grpc
proto-google-cloud-storage-control-v2
- 2.57.0
+ 2.58.0
com.google.cloud
google-cloud-storage-control
- 2.57.0
+ 2.58.0
com.google.cloud
@@ -172,7 +172,7 @@
com.google.truth
truth
- 1.4.4
+ 1.4.5
test
diff --git a/proto-google-cloud-storage-control-v2/pom.xml b/proto-google-cloud-storage-control-v2/pom.xml
index 21d6bbecce..d75d4c367c 100644
--- a/proto-google-cloud-storage-control-v2/pom.xml
+++ b/proto-google-cloud-storage-control-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-storage-control-v2
- 2.57.0
+ 2.58.0
proto-google-cloud-storage-control-v2
Proto library for proto-google-cloud-storage-control-v2
com.google.cloud
google-cloud-storage-parent
- 2.57.0
+ 2.58.0
@@ -21,6 +21,10 @@
com.google.api.grpc
proto-google-common-protos
+
+ com.google.api.grpc
+ proto-google-iam-v1
+
com.google.api
api-common
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageControlProto.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageControlProto.java
index e97e366047..483b2e529a 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageControlProto.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageControlProto.java
@@ -216,8 +216,10 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "lient.proto\032\037google/api/field_behavior.p"
+ "roto\032\033google/api/field_info.proto\032\031googl"
+ "e/api/resource.proto\032\030google/api/routing"
- + ".proto\032#google/longrunning/operations.pr"
- + "oto\032\036google/protobuf/duration.proto\032\033google/protobuf/empty.proto\032"
+ + ".proto\032\036google/iam/v1/iam_policy.proto\032\032"
+ + "google/iam/v1/policy.proto\032#google/longr"
+ + "unning/operations.proto\032\036google/protobuf"
+ + "/duration.proto\032\033google/protobuf/empty.proto\032"
+ " google/protobuf/field_mask.proto\032\037google/protobuf/timestamp.proto\"+\n"
+ "\021PendingRenameInfo\022\026\n"
+ "\toperation\030\001 \001(\tB\003\340A\003\"\342\002\n"
@@ -226,10 +228,10 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\016metageneration\030\003 \001(\003B\003\340A\003\0224\n"
+ "\013create_time\030\004 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\0224\n"
+ "\013update_time\030\005 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022N\n"
- + "\023pending_rename_info\030\007"
- + " \001(\0132,.google.storage.control.v2.PendingRenameInfoB\003\340A\003:l\352Ai\n"
- + "\035storage.googleapis.com/Folder\0227projects/{project}/"
- + "buckets/{bucket}/folders/{folder=**}*\007folders2\006folder\"\364\001\n"
+ + "\023pending_rename_info\030\007 \001(\0132,.googl"
+ + "e.storage.control.v2.PendingRenameInfoB\003\340A\003:l\352Ai\n"
+ + "\035storage.googleapis.com/Folder\022"
+ + "7projects/{project}/buckets/{bucket}/folders/{folder=**}*\007folders2\006folder\"\364\001\n"
+ "\020GetFolderRequest\0223\n"
+ "\004name\030\006 \001(\tB%\340A\002\372A\037\n"
+ "\035storage.googleapis.com/Folder\022$\n"
@@ -239,8 +241,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\030_if_metageneration_matchB\036\n"
+ "\034_if_metageneration_not_match\"\325\001\n"
+ "\023CreateFolderRequest\0225\n"
- + "\006parent\030\001 \001("
- + "\tB%\340A\002\372A\037\022\035storage.googleapis.com/Folder\0226\n"
+ + "\006parent\030\001 \001(\t"
+ + "B%\340A\002\372A\037\022\035storage.googleapis.com/Folder\0226\n"
+ "\006folder\030\002"
+ " \001(\0132!.google.storage.control.v2.FolderB\003\340A\002\022\026\n"
+ "\tfolder_id\030\003 \001(\tB\003\340A\002\022\026\n"
@@ -285,24 +287,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\026requested_cancellation\030\005 \001(\010B\003\340A\003\022\035\n"
+ "\020progress_percent\030\006 \001(\005B\003\340A\003\"\247\001\n"
+ "\024RenameFolderMetadata\022V\n"
- + "\017common_metadata\030\001 \001(\0132="
- + ".google.storage.control.v2.CommonLongRunningOperationMetadata\022\030\n"
+ + "\017common_metadata\030\001 \001(\0132=.google.storage.cont"
+ + "rol.v2.CommonLongRunningOperationMetadata\022\030\n"
+ "\020source_folder_id\030\002 \001(\t\022\035\n"
+ "\025destination_folder_id\030\003 \001(\t\"\370\003\n\r"
+ "StorageLayout\022\021\n"
+ "\004name\030\001 \001(\tB\003\340A\003\022\025\n"
+ "\010location\030\002 \001(\tB\003\340A\003\022\032\n\r"
+ "location_type\030\003 \001(\tB\003\340A\003\022d\n"
- + "\027custom_placement_config\030\004 \001(\0132"
- + ">.google.storage.control.v2.StorageLayout.CustomPlacementConfigB\003\340A\003\022c\n"
- + "\026hierarchical_namespace\030\005 \001(\0132>.google.storage.co"
- + "ntrol.v2.StorageLayout.HierarchicalNamespaceB\003\340A\003\032/\n"
+ + "\027custom_placement_config\030\004 \001(\0132>.google.storage.con"
+ + "trol.v2.StorageLayout.CustomPlacementConfigB\003\340A\003\022c\n"
+ + "\026hierarchical_namespace\030\005 \001(\013"
+ + "2>.google.storage.control.v2.StorageLayout.HierarchicalNamespaceB\003\340A\003\032/\n"
+ "\025CustomPlacementConfig\022\026\n"
+ "\016data_locations\030\001 \003(\t\032(\n"
+ "\025HierarchicalNamespace\022\017\n"
+ "\007enabled\030\001 \001(\010:{\352Ax\n"
- + "$storage.googleapis.com/StorageLayout\0221projects/{proje"
- + "ct}/buckets/{bucket}/storageLayout*\016storageLayouts2\r"
+ + "$storage.googleapis.com/StorageLay"
+ + "out\0221projects/{project}/buckets/{bucket}/storageLayout*\016storageLayouts2\r"
+ "storageLayout\"\206\001\n"
+ "\027GetStorageLayoutRequest\022:\n"
+ "\004name\030\001 \001(\tB,\340A\002\372A&\n"
@@ -313,10 +315,10 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\004name\030\001 \001(\tB\003\340A\010\022\033\n"
+ "\016metageneration\030\003 \001(\003B\003\340A\003\0224\n"
+ "\013create_time\030\004 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\0224\n"
- + "\013update_time\030\005"
- + " \001(\0132\032.google.protobuf.TimestampB\003\340A\003:\221\001\352A\215\001\n"
- + "$storage.googleapis.com/ManagedFolder\022Fprojects/{project"
- + "}/buckets/{bucket}/managedFolders/{managed_folder=**}*\016managedFolders2\r"
+ + "\013update_time\030\005 "
+ + "\001(\0132\032.google.protobuf.TimestampB\003\340A\003:\221\001\352A\215\001\n"
+ + "$storage.googleapis.com/ManagedFolder\022Fprojects/{project}/buckets/{bucket}/m"
+ + "anagedFolders/{managed_folder=**}*\016managedFolders2\r"
+ "managedFolder\"\202\002\n"
+ "\027GetManagedFolderRequest\022:\n"
+ "\004name\030\006 \001(\tB,\340A\002\372A&\n"
@@ -327,10 +329,10 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\030_if_metageneration_matchB\036\n"
+ "\034_if_metageneration_not_match\"\342\001\n"
+ "\032CreateManagedFolderRequest\022<\n"
- + "\006parent\030\001 \001(\tB,\340A\002\372A&"
- + "\022$storage.googleapis.com/ManagedFolder\022E\n"
- + "\016managed_folder\030\002"
- + " \001(\0132(.google.storage.control.v2.ManagedFolderB\003\340A\002\022\036\n"
+ + "\006parent\030\001 \001("
+ + "\tB,\340A\002\372A&\022$storage.googleapis.com/ManagedFolder\022E\n"
+ + "\016managed_folder\030\002 \001"
+ + "(\0132(.google.storage.control.v2.ManagedFolderB\003\340A\002\022\036\n"
+ "\021managed_folder_id\030\003 \001(\tB\003\340A\002\022\037\n\n"
+ "request_id\030\004 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"\236\002\n"
+ "\032DeleteManagedFolderRequest\022:\n"
@@ -354,8 +356,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ " \003(\0132(.google.storage.control.v2.ManagedFolder\022\027\n"
+ "\017next_page_token\030\002 \001(\t\"\260\002\n"
+ "\033CreateAnywhereCacheMetadata\022V\n"
- + "\017common_metadata\030\001 \001(\0132=."
- + "google.storage.control.v2.CommonLongRunningOperationMetadata\022\036\n"
+ + "\017common_metadata\030\001 \001(\0132=.google.storage.contr"
+ + "ol.v2.CommonLongRunningOperationMetadata\022\036\n"
+ "\021anywhere_cache_id\030\002 \001(\tH\000\210\001\001\022\021\n"
+ "\004zone\030\006 \001(\tH\001\210\001\001\022+\n"
+ "\003ttl\030\003 \001(\0132\031.google.protobuf.DurationH\002\210\001\001\022\035\n"
@@ -365,8 +367,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\004_ttlB\023\n"
+ "\021_admission_policy\"\260\002\n"
+ "\033UpdateAnywhereCacheMetadata\022V\n"
- + "\017common_metadata\030\001 \001(\0132=.google.storag"
- + "e.control.v2.CommonLongRunningOperationMetadata\022\036\n"
+ + "\017common_metadata\030\001"
+ + " \001(\0132=.google.storage.control.v2.CommonLongRunningOperationMetadata\022\036\n"
+ "\021anywhere_cache_id\030\002 \001(\tH\000\210\001\001\022\021\n"
+ "\004zone\030\005 \001(\tH\001\210\001\001\022+\n"
+ "\003ttl\030\003 \001(\0132\031.google.protobuf.DurationH\002\210\001\001\022\035\n"
@@ -386,14 +388,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\013update_time\030\007"
+ " \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022\033\n"
+ "\016pending_update\030\010 \001(\010B\003\340A\003:\216\001\352A\212\001\n"
- + "$storage.googleapis.com/AnywhereCache\022Cprojects/{project}/buckets/{bucket}/anyw"
- + "hereCaches/{anywhere_cache}*\016anywhereCaches2\r"
+ + "$storage.googleapis.com/AnywhereCache\022Cprojects/{project}/b"
+ + "uckets/{bucket}/anywhereCaches/{anywhere_cache}*\016anywhereCaches2\r"
+ "anywhereCache\"\302\001\n"
+ "\032CreateAnywhereCacheRequest\022<\n"
+ "\006parent\030\001 \001("
+ "\tB,\340A\002\372A&\022$storage.googleapis.com/AnywhereCache\022E\n"
- + "\016anywhere_cache\030\003"
- + " \001(\0132(.google.storage.control.v2.AnywhereCacheB\003\340A\002\022\037\n\n"
+ + "\016anywhere_cache\030\003 \001(\0132(.go"
+ + "ogle.storage.control.v2.AnywhereCacheB\003\340A\002\022\037\n\n"
+ "request_id\030\004 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"\272\001\n"
+ "\032UpdateAnywhereCacheRequest\022E\n"
+ "\016anywhere_cache\030\001"
@@ -407,7 +409,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "request_id\030\002 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"x\n"
+ "\031PauseAnywhereCacheRequest\022:\n"
+ "\004name\030\001 \001(\tB,\340A\002\372A&\n"
- + "$storage.googleapis.com/AnywhereCache\022\037\n\n"
+ + "$storage.googleapis.com/AnywhereCache\022\037\n"
+ + "\n"
+ "request_id\030\002 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"y\n"
+ "\032ResumeAnywhereCacheRequest\022:\n"
+ "\004name\030\001 \001(\tB,\340A\002\372A&\n"
@@ -418,8 +421,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "$storage.googleapis.com/AnywhereCache\022\037\n\n"
+ "request_id\030\002 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"\241\001\n"
+ "\031ListAnywhereCachesRequest\022<\n"
- + "\006parent\030\001 \001("
- + "\tB,\340A\002\372A&\022$storage.googleapis.com/AnywhereCache\022\021\n"
+ + "\006parent\030\001 \001(\tB"
+ + ",\340A\002\372A&\022$storage.googleapis.com/AnywhereCache\022\021\n"
+ "\tpage_size\030\002 \001(\005\022\022\n\n"
+ "page_token\030\003 \001(\t\022\037\n\n"
+ "request_id\030\004 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"x\n"
@@ -429,25 +432,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\017next_page_token\030\002 \001(\t\"\216\016\n"
+ "\022IntelligenceConfig\022\021\n"
+ "\004name\030\001 \001(\tB\003\340A\010\022X\n"
- + "\016edition_config\030\002"
- + " \001(\0162;.google.storage.control.v2.IntelligenceConfig.EditionConfigB\003\340A\001\0224\n"
+ + "\016edition_config\030\002 \001(\0162;.google.stora"
+ + "ge.control.v2.IntelligenceConfig.EditionConfigB\003\340A\001\0224\n"
+ "\013update_time\030\003 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022I\n"
- + "\006filter\030\004 \001(\01324.google.storage.c"
- + "ontrol.v2.IntelligenceConfig.FilterB\003\340A\001\022u\n"
- + "\035effective_intelligence_config\030\005 \001(\0132"
- + "I.google.storage.control.v2.Intelligence"
- + "Config.EffectiveIntelligenceConfigB\003\340A\003\022O\n"
- + "\014trial_config\030\007 \001(\01329.google.storage.c"
- + "ontrol.v2.IntelligenceConfig.TrialConfig\032\374\004\n"
+ + "\006filter\030\004 \001("
+ + "\01324.google.storage.control.v2.IntelligenceConfig.FilterB\003\340A\001\022u\n"
+ + "\035effective_intelligence_config\030\005 \001(\0132I.google.storage.con"
+ + "trol.v2.IntelligenceConfig.EffectiveIntelligenceConfigB\003\340A\003\022O\n"
+ + "\014trial_config\030\007 \001("
+ + "\01329.google.storage.control.v2.IntelligenceConfig.TrialConfig\032\374\004\n"
+ "\006Filter\022v\n"
- + " included_cloud_storage_locations\030\001 \001(\0132J.google.storage.control.v"
- + "2.IntelligenceConfig.Filter.CloudStorageLocationsH\000\022v\n"
- + " excluded_cloud_storage_locations\030\002 \001(\0132J.google.storage.control.v"
- + "2.IntelligenceConfig.Filter.CloudStorageLocationsH\000\022r\n"
- + "\036included_cloud_storage_buckets\030\003 \001(\0132H.google.storage.control.v2."
- + "IntelligenceConfig.Filter.CloudStorageBucketsH\001\022r\n"
- + "\036excluded_cloud_storage_buckets\030\004 \001(\0132H.google.storage.control.v2.Inte"
- + "lligenceConfig.Filter.CloudStorageBucketsH\001\032/\n"
+ + " included_cloud_storage_locations\030\001 \001(\0132J.goog"
+ + "le.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocationsH\000\022v\n"
+ + " excluded_cloud_storage_locations\030\002 \001(\0132J.goog"
+ + "le.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocationsH\000\022r\n"
+ + "\036included_cloud_storage_buckets\030\003 \001(\0132H.google"
+ + ".storage.control.v2.IntelligenceConfig.Filter.CloudStorageBucketsH\001\022r\n"
+ + "\036excluded_cloud_storage_buckets\030\004 \001(\0132H.google.sto"
+ + "rage.control.v2.IntelligenceConfig.Filter.CloudStorageBucketsH\001\032/\n"
+ "\025CloudStorageLocations\022\026\n"
+ "\tlocations\030\001 \003(\tB\003\340A\001\0325\n"
+ "\023CloudStorageBuckets\022\036\n"
@@ -455,26 +457,26 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\027cloud_storage_locationsB\027\n"
+ "\025cloud_storage_buckets\032\212\002\n"
+ "\033EffectiveIntelligenceConfig\022z\n"
- + "\021effective_edition\030\001 \001(\0162Z.google.storage.cont"
- + "rol.v2.IntelligenceConfig.EffectiveIntelligenceConfig.EffectiveEditionB\003\340A\003\022"
- + " \n"
+ + "\021effective_edition\030\001 \001(\0162Z.google.storage.control.v2.IntelligenceC"
+ + "onfig.EffectiveIntelligenceConfig.EffectiveEditionB\003\340A\003\022 \n"
+ "\023intelligence_config\030\002 \001(\tB\003\340A\003\"M\n"
+ "\020EffectiveEdition\022!\n"
+ "\035EFFECTIVE_EDITION_UNSPECIFIED\020\000\022\010\n"
+ "\004NONE\020\001\022\014\n"
+ "\010STANDARD\020\002\032C\n"
+ "\013TrialConfig\0224\n"
- + "\013expire_time\030\003 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\"c\n\r"
+ + "\013expire_time\030\003 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\"c\n"
+ + "\r"
+ "EditionConfig\022\036\n"
+ "\032EDITION_CONFIG_UNSPECIFIED\020\000\022\013\n"
+ "\007INHERIT\020\001\022\014\n"
+ "\010DISABLED\020\002\022\014\n"
+ "\010STANDARD\020\003\022\t\n"
+ "\005TRIAL\020\005:\213\002\352A\207\002\n"
- + ")storage.googleapis.com/IntelligenceConfig\0228folders/{folder}/locations/{lo"
- + "cation}/intelligenceConfig\022;organizations/{org}/locations/{location}/intelligenc"
- + "eConfig\022:projects/{project}/locations/{l"
- + "ocation}/intelligenceConfig*\023intelligenceConfigs2\022intelligenceConfig\"\325\001\n"
+ + ")storage.googleapis.com/IntelligenceConfig\0228folders/{f"
+ + "older}/locations/{location}/intelligenceConfig\022;organizations/{org}/locations/{l"
+ + "ocation}/intelligenceConfig\022:projects/{project}/locations/{location}/intelligenc"
+ + "eConfig*\023intelligenceConfigs2\022intelligenceConfig\"\325\001\n"
+ "+UpdateOrganizationIntelligenceConfigRequest\022O\n"
+ "\023intelligence_config\030\001"
+ " \001(\0132-.google.storage.control.v2.IntelligenceConfigB\003\340A\002\0224\n"
@@ -482,14 +484,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\022\037\n\n"
+ "request_id\030\003 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"\317\001\n"
+ "%UpdateFolderIntelligenceConfigRequest\022O\n"
- + "\023intelligence_config\030\001 \001(\0132-.go"
- + "ogle.storage.control.v2.IntelligenceConfigB\003\340A\002\0224\n"
+ + "\023intelligence_config\030\001"
+ + " \001(\0132-.google.storage.control.v2.IntelligenceConfigB\003\340A\002\0224\n"
+ "\013update_mask\030\002"
+ " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\022\037\n\n"
+ "request_id\030\003 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"\320\001\n"
+ "&UpdateProjectIntelligenceConfigRequest\022O\n"
- + "\023intelligence_config\030\001"
- + " \001(\0132-.google.storage.control.v2.IntelligenceConfigB\003\340A\002\0224\n"
+ + "\023intelligence_config\030\001 \001(\0132-.google.stor"
+ + "age.control.v2.IntelligenceConfigB\003\340A\002\0224\n"
+ "\013update_mask\030\002"
+ " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\022\037\n\n"
+ "request_id\030\003 \001(\tB\013\340A\001\342\214\317\327\010\002\010\001\"k\n"
@@ -501,98 +503,113 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ ")storage.googleapis.com/IntelligenceConfig\"f\n"
+ "#GetProjectIntelligenceConfigRequest\022?\n"
+ "\004name\030\001 \001(\tB1\340A\002\372A+\n"
- + ")storage.googleapis.com/IntelligenceConfig2\202&\n"
+ + ")storage.googleapis.com/IntelligenceConfig2\356*\n"
+ "\016StorageControl\022\232\001\n"
- + "\014CreateFolder\022..google.storage.control.v2.CreateFolderRequest\032!.google.stora"
- + "ge.control.v2.Folder\"7\332A\027parent,folder,folder_id\212\323\344\223\002\027\022\025\n"
+ + "\014CreateFolder\022..google.storage.control.v2.CreateFolderRe"
+ + "quest\032!.google.storage.control.v2.Folder\"7\332A\027parent,folder,folder_id\212\323\344\223\002\027\022\025\n"
+ "\006parent\022\013{bucket=**}\022\217\001\n"
- + "\014DeleteFolder\022..google.storage.control."
- + "v2.DeleteFolderRequest\032\026.google.protobuf.Empty\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\014DeleteFolder\022..google.storage.control.v2.DeleteFolderReque"
+ + "st\032\026.google.protobuf.Empty\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\224\001\n"
- + "\tGetFolder\022+.google.storage.control.v2.GetFolderReque"
- + "st\032!.google.storage.control.v2.Folder\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\tGetFolder\022+.google.storage.contr"
+ + "ol.v2.GetFolderRequest\032!.google.storage.control.v2.Folder\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\224\001\n"
- + "\013ListFolders\022-.google.storage.control.v2.ListFoldersRequest\032.."
- + "google.storage.control.v2.ListFoldersResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n"
+ + "\013ListFolders\022-.google.storage.control.v2.L"
+ + "istFoldersRequest\032..google.storage.contr"
+ + "ol.v2.ListFoldersResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n"
+ "\006parent\022\013{bucket=**}\022\315\001\n"
- + "\014RenameFolder\022..google.storage."
- + "control.v2.RenameFolderRequest\032\035.google.longrunning.Operation\"n\312A\036\n"
- + "\006Folder\022\024Rena"
- + "meFolderMetadata\332A\032name,destination_folder_id\212\323\344\223\002*\022(\n"
+ + "\014RenameFolder\022..google.storage.control.v2.RenameFol"
+ + "derRequest\032\035.google.longrunning.Operation\"n\312A\036\n"
+ + "\006Folder\022\024RenameFolderMetadata\332A\032name,destination_folder_id\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\251\001\n"
- + "\020GetStorageLayout\0222.google.storage.control.v2.GetStorageLayoutR"
- + "equest\032(.google.storage.control.v2.StorageLayout\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\020GetStorageLayout\0222.google.storage.control."
+ + "v2.GetStorageLayoutRequest\032(.google.stor"
+ + "age.control.v2.StorageLayout\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\277\001\n"
- + "\023CreateManagedFolder\0225.google.storage.control.v2.Cr"
- + "eateManagedFolderRequest\032(.google.storag"
- + "e.control.v2.ManagedFolder\"G\332A\'parent,managed_folder,managed_folder_id\212\323\344\223\002\027\022\025\n"
+ + "\023CreateManagedFolder\0225.google.storage.control.v2.CreateManagedFolderReq"
+ + "uest\032(.google.storage.control.v2.Managed"
+ + "Folder\"G\332A\'parent,managed_folder,managed_folder_id\212\323\344\223\002\027\022\025\n"
+ "\006parent\022\013{bucket=**}\022\235\001\n"
- + "\023DeleteManagedFolder\0225.google.storage.control.v2.DeleteMa"
- + "nagedFolderRequest\032\026.google.protobuf.Empty\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\023DeleteManagedFolder\0225.google.storage"
+ + ".control.v2.DeleteManagedFolderRequest\032\026.google.protobuf.Empty\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\251\001\n"
- + "\020GetManagedFolder\0222.google.storage.control.v2.GetManagedF"
- + "olderRequest\032(.google.storage.control.v2.ManagedFolder\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\020GetManagedFolder\0222.google.storage.control.v2.GetManagedFolderRequest\032(.googl"
+ + "e.storage.control.v2.ManagedFolder\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\251\001\n"
- + "\022ListManagedFolders\0224.google.storage.control."
- + "v2.ListManagedFoldersRequest\0325.google.st"
- + "orage.control.v2.ListManagedFoldersResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n"
+ + "\022ListManagedFolders\0224.google.storage.control.v2.ListManagedFolder"
+ + "sRequest\0325.google.storage.control.v2.Lis"
+ + "tManagedFoldersResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n"
+ "\006parent\022\013{bucket=**}\022\321\001\n"
- + "\023CreateAnywhereCache\0225.google.sto"
- + "rage.control.v2.CreateAnywhereCacheRequest\032\035.google.longrunning.Operation\"d\312A,\n\r"
- + "AnywhereCache\022\033CreateAnywhereCacheMetadata\332A\025parent,anywhere_cache\212\323\344\223\002\027\022\025\n"
+ + "\023CreateAnywhereCache\0225.google.storage.control.v2.Crea"
+ + "teAnywhereCacheRequest\032\035.google.longrunning.Operation\"d\312A,\n\r"
+ + "AnywhereCache\022\033Creat"
+ + "eAnywhereCacheMetadata\332A\025parent,anywhere_cache\212\323\344\223\002\027\022\025\n"
+ "\006parent\022\013{bucket=**}\022\371\001\n"
- + "\023UpdateAnywhereCache\0225.google.storage.control.v2.UpdateAnywhe"
- + "reCacheRequest\032\035.google.longrunning.Operation\"\213\001\312A,\n\r"
- + "AnywhereCache\022\033UpdateAnywhe"
- + "reCacheMetadata\332A\032anywhere_cache,update_mask\212\323\344\223\0029\0227\n"
+ + "\023UpdateAnywhereCache\0225.google.storage.con"
+ + "trol.v2.UpdateAnywhereCacheRequest\032\035.google.longrunning.Operation\"\213\001\312A,\n\r"
+ + "Anywher"
+ + "eCache\022\033UpdateAnywhereCacheMetadata\332A\032anywhere_cache,update_mask\212\323\344\223\0029\0227\n"
+ "\023anywhere_cache.name\022 {bucket=projects/*/buckets/*}/**\022\261\001\n"
- + "\024DisableAnywhereCache\0226.google.storage.control.v2"
- + ".DisableAnywhereCacheRequest\032(.google.st"
- + "orage.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\024DisableAnywhereCache\0226.google.storage.control.v2.DisableAnywhereCach"
+ + "eRequest\032(.google.storage.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\255\001\n"
- + "\022PauseAnywhereCache\0224.google.storage.control.v2.PauseAnywhereCacheReq"
- + "uest\032(.google.storage.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\022PauseAnywhereCache\0224.google.storage.control.v2.P"
+ + "auseAnywhereCacheRequest\032(.google.storag"
+ + "e.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\257\001\n"
- + "\023ResumeAnywhereCache\0225.google.storage.control.v2.Resu"
- + "meAnywhereCacheRequest\032(.google.storage."
- + "control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\023ResumeAnywhereCache\0225.google.storage.control.v2.ResumeAnywhereCacheReque"
+ + "st\032(.google.storage.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\251\001\n"
- + "\020GetAnywhereCache\0222.google.storage.control.v2.GetAnywhereCacheRequest\032(.goo"
- + "gle.storage.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ + "\020GetAnywhereCache\0222.google.storage.control.v2.GetAnywhe"
+ + "reCacheRequest\032(.google.storage.control.v2.AnywhereCache\"7\332A\004name\212\323\344\223\002*\022(\n"
+ "\004name\022 {bucket=projects/*/buckets/*}/**\022\251\001\n"
- + "\022ListAnywhereCaches\0224.google.storage.control.v2.ListAnywhereCac"
- + "hesRequest\0325.google.storage.control.v2.L"
- + "istAnywhereCachesResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n"
+ + "\022ListAnywhereCaches\0224.google.storage.contro"
+ + "l.v2.ListAnywhereCachesRequest\0325.google."
+ + "storage.control.v2.ListAnywhereCachesResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n"
+ "\006parent\022\013{bucket=**}\022\322\001\n"
- + "\034GetProjectIntelligenceConfig\022>.google.storage.cont"
- + "rol.v2.GetProjectIntelligenceConfigRequest\032-.google.storage.control.v2.Intellige"
- + "nceConfig\"C\332A\004name\202\323\344\223\0026\0224/v2/{name=proj"
- + "ects/*/locations/*/intelligenceConfig}\022\235\002\n"
- + "\037UpdateProjectIntelligenceConfig\022A.google.storage.control.v2.UpdateProjectInte"
- + "lligenceConfigRequest\032-.google.storage.c"
- + "ontrol.v2.IntelligenceConfig\"\207\001\332A\037intell"
- + "igence_config,update_mask\202\323\344\223\002_2H/v2/{in"
- + "telligence_config.name=projects/*/locati"
- + "ons/*/intelligenceConfig}:\023intelligence_config\022\317\001\n"
- + "\033GetFolderIntelligenceConfig\022=.google.storage.control.v2.GetFolderInte"
- + "lligenceConfigRequest\032-.google.storage.c"
- + "ontrol.v2.IntelligenceConfig\"B\332A\004name\202\323\344"
- + "\223\0025\0223/v2/{name=folders/*/locations/*/intelligenceConfig}\022\232\002\n"
- + "\036UpdateFolderIntelligenceConfig\022@.google.storage.control.v2."
- + "UpdateFolderIntelligenceConfigRequest\032-.google.storage.control.v2.IntelligenceCo"
- + "nfig\"\206\001\332A\037intelligence_config,update_mas"
- + "k\202\323\344\223\002^2G/v2/{intelligence_config.name=f"
- + "olders/*/locations/*/intelligenceConfig}:\023intelligence_config\022\341\001\n"
- + "!GetOrganizationIntelligenceConfig\022C.google.storage.con"
- + "trol.v2.GetOrganizationIntelligenceConfigRequest\032-.google.storage.control.v2.Int"
- + "elligenceConfig\"H\332A\004name\202\323\344\223\002;\0229/v2/{nam"
- + "e=organizations/*/locations/*/intelligenceConfig}\022\254\002\n"
- + "$UpdateOrganizationIntelligenceConfig\022F.google.storage.control.v2.U"
- + "pdateOrganizationIntelligenceConfigRequest\032-.google.storage.control.v2.Intellige"
- + "nceConfig\"\214\001\332A\037intelligence_config,updat"
- + "e_mask\202\323\344\223\002d2M/v2/{intelligence_config.n"
- + "ame=organizations/*/locations/*/intellig"
- + "enceConfig}:\023intelligence_config\032\247\002\312A\026st"
+ + "\034GetProjectIntelligenceConfig\022>.google.storage.control.v2.GetProjectInt"
+ + "elligenceConfigRequest\032-.google.storage."
+ + "control.v2.IntelligenceConfig\"C\332A\004name\202\323"
+ + "\344\223\0026\0224/v2/{name=projects/*/locations/*/intelligenceConfig}\022\235\002\n"
+ + "\037UpdateProjectIntelligenceConfig\022A.google.storage.control."
+ + "v2.UpdateProjectIntelligenceConfigRequest\032-.google.storage.control.v2.Intelligen"
+ + "ceConfig\"\207\001\332A\037intelligence_config,update"
+ + "_mask\202\323\344\223\002_2H/v2/{intelligence_config.na"
+ + "me=projects/*/locations/*/intelligenceConfig}:\023intelligence_config\022\317\001\n"
+ + "\033GetFolderIntelligenceConfig\022=.google.storage.cont"
+ + "rol.v2.GetFolderIntelligenceConfigRequest\032-.google.storage.control.v2.Intelligen"
+ + "ceConfig\"B\332A\004name\202\323\344\223\0025\0223/v2/{name=folders/*/locations/*/intelligenceConfig}\022\232\002\n"
+ + "\036UpdateFolderIntelligenceConfig\022@.google.storage.control.v2.UpdateFolderIntellig"
+ + "enceConfigRequest\032-.google.storage.contr"
+ + "ol.v2.IntelligenceConfig\"\206\001\332A\037intelligen"
+ + "ce_config,update_mask\202\323\344\223\002^2G/v2/{intell"
+ + "igence_config.name=folders/*/locations/*"
+ + "/intelligenceConfig}:\023intelligence_config\022\341\001\n"
+ + "!GetOrganizationIntelligenceConfig\022C.google.storage.control.v2.GetOrganizat"
+ + "ionIntelligenceConfigRequest\032-.google.st"
+ + "orage.control.v2.IntelligenceConfig\"H\332A\004"
+ + "name\202\323\344\223\002;\0229/v2/{name=organizations/*/locations/*/intelligenceConfig}\022\254\002\n"
+ + "$UpdateOrganizationIntelligenceConfig\022F.google."
+ + "storage.control.v2.UpdateOrganizationIntelligenceConfigRequest\032-.google.storage."
+ + "control.v2.IntelligenceConfig\"\214\001\332A\037intel"
+ + "ligence_config,update_mask\202\323\344\223\002d2M/v2/{i"
+ + "ntelligence_config.name=organizations/*/"
+ + "locations/*/intelligenceConfig}:\023intelligence_config\022\243\001\n"
+ + "\014GetIamPolicy\022\".google.i"
+ + "am.v1.GetIamPolicyRequest\032\025.google.iam.v1.Policy\"X\332A\010resource\212\323\344\223\002G\022\027\n"
+ + "\010resource\022\013{bucket=**}\022,\n"
+ + "\010resource\022 {bucket=projects/*/buckets/*}/**\022\252\001\n"
+ + "\014SetIamPolicy\022\".google.iam.v1.SetIamPolicyRequest\032\025.google"
+ + ".iam.v1.Policy\"_\332A\017resource,policy\212\323\344\223\002G\022\027\n"
+ + "\010resource\022\013{bucket=**}\022,\n"
+ + "\010resource\022 {bucket=projects/*/buckets/*}/**\022\226\002\n"
+ + "\022TestIamPermissions\022(.google.iam.v1.TestIamPe"
+ + "rmissionsRequest\032).google.iam.v1.TestIam"
+ + "PermissionsResponse\"\252\001\332A\024resource,permissions\212\323\344\223\002\214\001\022\027\n"
+ + "\010resource\022\013{bucket=**}\0224\n"
+ + "\010resource\022({bucket=projects/*/buckets/*}/objects/**\022;\n"
+ + "\010resource\022/{bucket=project"
+ + "s/*/buckets/*}/managedFolders/**\032\247\002\312A\026st"
+ "orage.googleapis.com\322A\212\002https://www.goog"
+ "leapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-platform.re"
+ "ad-only,https://www.googleapis.com/auth/devstorage.full_control,https://www.goog"
@@ -614,6 +631,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.api.FieldInfoProto.getDescriptor(),
com.google.api.ResourceProto.getDescriptor(),
com.google.api.RoutingProto.getDescriptor(),
+ com.google.iam.v1.IamPolicyProto.getDescriptor(),
+ com.google.iam.v1.PolicyProto.getDescriptor(),
com.google.longrunning.OperationsProto.getDescriptor(),
com.google.protobuf.DurationProto.getDescriptor(),
com.google.protobuf.EmptyProto.getDescriptor(),
@@ -1032,6 +1051,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
com.google.api.FieldInfoProto.getDescriptor();
com.google.api.ResourceProto.getDescriptor();
com.google.api.RoutingProto.getDescriptor();
+ com.google.iam.v1.IamPolicyProto.getDescriptor();
+ com.google.iam.v1.PolicyProto.getDescriptor();
com.google.longrunning.OperationsProto.getDescriptor();
com.google.protobuf.DurationProto.getDescriptor();
com.google.protobuf.EmptyProto.getDescriptor();
diff --git a/proto-google-cloud-storage-control-v2/src/main/proto/google/storage/control/v2/storage_control.proto b/proto-google-cloud-storage-control-v2/src/main/proto/google/storage/control/v2/storage_control.proto
index 28680a7617..4a3bda4e5b 100644
--- a/proto-google-cloud-storage-control-v2/src/main/proto/google/storage/control/v2/storage_control.proto
+++ b/proto-google-cloud-storage-control-v2/src/main/proto/google/storage/control/v2/storage_control.proto
@@ -22,6 +22,8 @@ import "google/api/field_behavior.proto";
import "google/api/field_info.proto";
import "google/api/resource.proto";
import "google/api/routing.proto";
+import "google/iam/v1/iam_policy.proto";
+import "google/iam/v1/policy.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
@@ -306,6 +308,63 @@ service StorageControl {
};
option (google.api.method_signature) = "intelligence_config,update_mask";
}
+
+ // Gets the IAM policy for a specified bucket.
+ // The `resource` field in the request should be
+ // `projects/_/buckets/{bucket}` for a bucket, or
+ // `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ // for a managed folder.
+ rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest)
+ returns (google.iam.v1.Policy) {
+ option (google.api.routing) = {
+ routing_parameters { field: "resource" path_template: "{bucket=**}" }
+ routing_parameters {
+ field: "resource"
+ path_template: "{bucket=projects/*/buckets/*}/**"
+ }
+ };
+ option (google.api.method_signature) = "resource";
+ }
+
+ // Updates an IAM policy for the specified bucket.
+ // The `resource` field in the request should be
+ // `projects/_/buckets/{bucket}` for a bucket, or
+ // `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ // for a managed folder.
+ rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest)
+ returns (google.iam.v1.Policy) {
+ option (google.api.routing) = {
+ routing_parameters { field: "resource" path_template: "{bucket=**}" }
+ routing_parameters {
+ field: "resource"
+ path_template: "{bucket=projects/*/buckets/*}/**"
+ }
+ };
+ option (google.api.method_signature) = "resource,policy";
+ }
+
+ // Tests a set of permissions on the given bucket, object, or managed folder
+ // to see which, if any, are held by the caller.
+ // The `resource` field in the request should be
+ // `projects/_/buckets/{bucket}` for a bucket,
+ // `projects/_/buckets/{bucket}/objects/{object}` for an object, or
+ // `projects/_/buckets/{bucket}/managedFolders/{managedFolder}`
+ // for a managed folder.
+ rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest)
+ returns (google.iam.v1.TestIamPermissionsResponse) {
+ option (google.api.routing) = {
+ routing_parameters { field: "resource" path_template: "{bucket=**}" }
+ routing_parameters {
+ field: "resource"
+ path_template: "{bucket=projects/*/buckets/*}/objects/**"
+ }
+ routing_parameters {
+ field: "resource"
+ path_template: "{bucket=projects/*/buckets/*}/managedFolders/**"
+ }
+ };
+ option (google.api.method_signature) = "resource,permissions";
+ }
}
// Contains information about a pending rename operation.
diff --git a/proto-google-cloud-storage-v2/pom.xml b/proto-google-cloud-storage-v2/pom.xml
index 6b896e6b93..c1d72f4600 100644
--- a/proto-google-cloud-storage-v2/pom.xml
+++ b/proto-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-storage-v2
- 2.57.0
+ 2.58.0
proto-google-cloud-storage-v2
PROTO library for proto-google-cloud-storage-v2
com.google.cloud
google-cloud-storage-parent
- 2.57.0
+ 2.58.0
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index b94f1f2b68..8a08445024 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -30,12 +30,12 @@
com.google.cloud
google-cloud-storage
- 2.56.0
+ 2.57.0
com.google.cloud
google-cloud-storage-control
- 2.56.0
+ 2.57.0
@@ -48,7 +48,7 @@
com.google.truth
truth
- 1.4.4
+ 1.4.5
test
@@ -66,19 +66,19 @@
com.google.cloud
google-cloud-pubsub
- 1.141.3
+ 1.141.4
test
com.google.cloud
google-cloud-kms
- 2.76.0
+ 2.77.0
test
com.google.cloud
google-cloud-storage
- 2.56.0
+ 2.57.0
tests
test
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 701a5da140..814b1ea2d6 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,12 +28,12 @@
com.google.cloud
google-cloud-storage
- 2.57.0
+ 2.58.0
com.google.cloud
google-cloud-storage-control
- 2.57.0
+ 2.58.0
compile
@@ -46,7 +46,7 @@
com.google.truth
truth
- 1.4.4
+ 1.4.5
test
@@ -58,19 +58,19 @@
com.google.cloud
google-cloud-pubsub
- 1.141.3
+ 1.141.4
test
com.google.cloud
google-cloud-kms
- 2.76.0
+ 2.77.0
test
com.google.cloud
google-cloud-storage
- 2.57.0
+ 2.58.0
tests
test
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 43d0f1d13e..571f135634 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
libraries-bom
- 26.67.0
+ 26.68.0
pom
import
@@ -58,7 +58,7 @@
com.google.truth
truth
- 1.4.4
+ 1.4.5
test
@@ -76,13 +76,13 @@
com.google.cloud
google-cloud-pubsub
- 1.141.3
+ 1.141.4
test
com.google.cloud
google-cloud-kms
- 2.76.0
+ 2.77.0
test
@@ -99,7 +99,7 @@
com.google.cloud
google-cloud-storage
- 2.56.0
+ 2.57.0
tests
test
diff --git a/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectMultipleRangedRead.java b/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectMultipleRangedRead.java
new file mode 100644
index 0000000000..ce36771ad9
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectMultipleRangedRead.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.storage.object;
+
+// [START storage_read_appendable_object_multiple_ranges]
+
+import com.google.api.core.ApiFuture;
+import com.google.api.core.ApiFutures;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobReadSession;
+import com.google.cloud.storage.RangeSpec;
+import com.google.cloud.storage.ReadProjectionConfigs;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+public class AppendableObjectMultipleRangedRead {
+ public static void appendableObjectMultipleRangedRead(
+ String bucketName, String objectName, long offset1, int length1, long offset2, int length2)
+ throws Exception {
+ try (Storage storage = StorageOptions.grpc().build().getService()) {
+ BlobId blobId = BlobId.of(bucketName, objectName);
+ ApiFuture futureBlobReadSession = storage.blobReadSession(blobId);
+ RangeSpec rangeSpec1 = RangeSpec.of(offset1, length1);
+ RangeSpec rangeSpec2 = RangeSpec.of(offset2, length2);
+
+ try (BlobReadSession blobReadSession = futureBlobReadSession.get(10, TimeUnit.SECONDS)) {
+ ApiFuture future1 =
+ blobReadSession.readAs(ReadProjectionConfigs.asFutureBytes().withRangeSpec(rangeSpec1));
+ ApiFuture future2 =
+ blobReadSession.readAs(ReadProjectionConfigs.asFutureBytes().withRangeSpec(rangeSpec2));
+
+ List allBytes = ApiFutures.allAsList(ImmutableList.of(future1, future2)).get();
+
+ byte[] bytes1 = allBytes.get(0);
+ byte[] bytes2 = allBytes.get(1);
+
+ System.out.println(
+ "Successfully read "
+ + bytes1.length
+ + " bytes from range 1 and "
+ + bytes2.length
+ + " bytes from range 2.");
+ }
+ }
+ }
+}
+
+// [END storage_read_appendable_object_multiple_ranges]
diff --git a/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectReadFullObject.java b/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectReadFullObject.java
new file mode 100644
index 0000000000..0b24051ca6
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectReadFullObject.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.storage.object;
+
+// [START storage_read_appendable_object_full]
+
+import com.google.api.core.ApiFuture;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobReadSession;
+import com.google.cloud.storage.ReadAsChannel;
+import com.google.cloud.storage.ReadProjectionConfigs;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import java.nio.ByteBuffer;
+import java.nio.channels.ScatteringByteChannel;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+public class AppendableObjectReadFullObject {
+ public static void appendableObjectReadFullObject(String bucketName, String objectName)
+ throws Exception {
+ try (Storage storage = StorageOptions.grpc().build().getService()) {
+ BlobId blobId = BlobId.of(bucketName, objectName);
+ ApiFuture futureBlobReadSession = storage.blobReadSession(blobId);
+
+ try (BlobReadSession blobReadSession = futureBlobReadSession.get(10, TimeUnit.SECONDS)) {
+
+ ReadAsChannel readAsChannelConfig = ReadProjectionConfigs.asChannel();
+ try (ScatteringByteChannel channel = blobReadSession.readAs(readAsChannelConfig)) {
+ long totalBytesRead = 0;
+ ByteBuffer buffer = ByteBuffer.allocate(64 * 1024);
+ int bytesRead;
+
+ while ((bytesRead = channel.read(buffer)) != -1) {
+ totalBytesRead += bytesRead;
+ buffer.clear();
+ }
+
+ System.out.printf(
+ Locale.US,
+ "Successfully read a total of %d bytes from object %s%n",
+ totalBytesRead,
+ blobId.toGsUtilUri());
+ }
+ }
+ }
+ }
+}
+// [END storage_read_appendable_object_full]
diff --git a/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectSingleRangedRead.java b/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectSingleRangedRead.java
new file mode 100644
index 0000000000..437f47203f
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/storage/object/AppendableObjectSingleRangedRead.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.storage.object;
+
+// [START storage_read_appendable_object_single_range]
+
+import com.google.api.core.ApiFuture;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobReadSession;
+import com.google.cloud.storage.RangeSpec;
+import com.google.cloud.storage.ReadProjectionConfigs;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import java.util.concurrent.TimeUnit;
+
+public class AppendableObjectSingleRangedRead {
+ public static void appendableObjectSingleRangedRead(
+ String bucketName, String objectName, long offset, int length) throws Exception {
+
+ try (Storage storage = StorageOptions.grpc().build().getService()) {
+ BlobId blobId = BlobId.of(bucketName, objectName);
+ ApiFuture futureBlobReadSession = storage.blobReadSession(blobId);
+
+ try (BlobReadSession blobReadSession = futureBlobReadSession.get(10, TimeUnit.SECONDS)) {
+ // Define the range of bytes to read.
+ RangeSpec rangeSpec = RangeSpec.of(offset, length);
+ ApiFuture future =
+ blobReadSession.readAs(ReadProjectionConfigs.asFutureBytes().withRangeSpec(rangeSpec));
+
+ // Wait for the read to complete.
+ byte[] bytes = future.get();
+
+ System.out.println(
+ "Successfully read "
+ + bytes.length
+ + " bytes from object "
+ + objectName
+ + " in bucket "
+ + bucketName);
+ }
+ }
+ }
+}
+// [END storage_read_appendable_object_single_range]
diff --git a/samples/snippets/src/main/java/com/example/storage/object/FinalizeAppendableObjectUpload.java b/samples/snippets/src/main/java/com/example/storage/object/FinalizeAppendableObjectUpload.java
new file mode 100644
index 0000000000..161a2272cf
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/storage/object/FinalizeAppendableObjectUpload.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.storage.object;
+
+// [START storage_finalize_appendable_object_upload]
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BlobAppendableUpload;
+import com.google.cloud.storage.BlobAppendableUploadConfig;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+
+public class FinalizeAppendableObjectUpload {
+ public static void finalizeAppendableObjectUpload(String bucketName, String objectName)
+ throws Exception {
+ // The ID of your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ // The ID of your GCS unfinalized appendable object
+ // String objectName = "your-object-name";
+
+ try (Storage storage = StorageOptions.grpc().build().getService()) {
+ BlobId blobId = BlobId.of(bucketName, objectName);
+ Blob existingBlob = storage.get(blobId);
+
+ if (existingBlob == null) {
+ System.out.println("Object " + objectName + " not found in bucket " + bucketName);
+ return;
+ }
+
+ BlobInfo blobInfoForTakeover = BlobInfo.newBuilder(existingBlob.getBlobId()).build();
+ BlobAppendableUpload finalizingSession =
+ storage.blobAppendableUpload(
+ blobInfoForTakeover,
+ BlobAppendableUploadConfig.of()
+ .withCloseAction(BlobAppendableUploadConfig.CloseAction.FINALIZE_WHEN_CLOSING));
+
+ try (BlobAppendableUpload.AppendableUploadWriteableByteChannel channel =
+ finalizingSession.open()) {
+ channel.finalizeAndClose();
+ }
+
+ System.out.println(
+ "Successfully finalized object " + objectName + " in bucket " + bucketName);
+ }
+ }
+}
+// [END storage_finalize_appendable_object_upload]
diff --git a/samples/snippets/src/main/java/com/example/storage/object/ResumeAppendableObjectUpload.java b/samples/snippets/src/main/java/com/example/storage/object/ResumeAppendableObjectUpload.java
new file mode 100644
index 0000000000..8852b585d8
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/storage/object/ResumeAppendableObjectUpload.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.storage.object;
+
+// [START storage_resume_appendable_object_upload]
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BlobAppendableUpload;
+import com.google.cloud.storage.BlobAppendableUpload.AppendableUploadWriteableByteChannel;
+import com.google.cloud.storage.BlobAppendableUploadConfig;
+import com.google.cloud.storage.BlobAppendableUploadConfig.CloseAction;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import com.google.common.io.ByteStreams;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.nio.file.Paths;
+import java.util.Locale;
+
+public class ResumeAppendableObjectUpload {
+ public static void resumeAppendableObjectUpload(
+ String bucketName, String objectName, String filePath) throws Exception {
+ // The ID of your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ // The ID of your GCS unfinalized appendable object
+ // String objectName = "your-object-name";
+
+ // The path to the file to upload
+ // String filePath = "path/to/your/file";
+
+ try (Storage storage = StorageOptions.grpc().build().getService()) {
+ BlobId blobId = BlobId.of(bucketName, objectName);
+ Blob existingBlob = storage.get(blobId);
+ BlobInfo blobInfoForTakeover = BlobInfo.newBuilder(existingBlob.getBlobId()).build();
+
+ long currentObjectSize = existingBlob.getSize();
+ System.out.printf(
+ Locale.US,
+ "Resuming upload for %s. Currently uploaded size: %d bytes\n",
+ blobId.toGsUtilUri(),
+ currentObjectSize);
+
+ BlobAppendableUploadConfig config =
+ BlobAppendableUploadConfig.of().withCloseAction(CloseAction.CLOSE_WITHOUT_FINALIZING);
+ BlobAppendableUpload resumeUploadSession =
+ storage.blobAppendableUpload(blobInfoForTakeover, config);
+ try (FileChannel fileChannel = FileChannel.open(Paths.get(filePath));
+ AppendableUploadWriteableByteChannel channel = resumeUploadSession.open()) {
+
+ if (fileChannel.size() < currentObjectSize) {
+ throw new IOException(
+ "Local file is smaller than the already uploaded data. File size: "
+ + fileChannel.size()
+ + ", Uploaded size: "
+ + currentObjectSize);
+ } else if (fileChannel.size() == currentObjectSize) {
+ System.out.println("No more data to upload.");
+ } else {
+ fileChannel.position(currentObjectSize);
+ System.out.printf(
+ Locale.US, "Appending %d bytes\n", fileChannel.size() - currentObjectSize);
+ ByteStreams.copy(fileChannel, channel);
+ }
+ }
+ BlobInfo result = storage.get(blobId);
+ System.out.printf(
+ Locale.US,
+ "Object %s successfully resumed. Total size: %d\n",
+ result.getBlobId().toGsUtilUriWithGeneration(),
+ result.getSize());
+ }
+ }
+}
+// [END storage_resume_appendable_object_upload]
diff --git a/samples/snippets/src/main/java/com/example/storage/object/StartAppendableObjectUpload.java b/samples/snippets/src/main/java/com/example/storage/object/StartAppendableObjectUpload.java
new file mode 100644
index 0000000000..cda8b7c898
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/storage/object/StartAppendableObjectUpload.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.storage.object;
+
+// [START storage_start_appendable_object_upload]
+
+import com.google.cloud.storage.BlobAppendableUpload;
+import com.google.cloud.storage.BlobAppendableUpload.AppendableUploadWriteableByteChannel;
+import com.google.cloud.storage.BlobAppendableUploadConfig;
+import com.google.cloud.storage.BlobAppendableUploadConfig.CloseAction;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import com.google.common.io.ByteStreams;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.file.Paths;
+import java.util.Locale;
+
+public class StartAppendableObjectUpload {
+ public static void startAppendableObjectUpload(
+ String bucketName, String objectName, String filePath) throws Exception {
+ // The ID of your GCS bucket
+ // String bucketName = "your-unique-bucket-name";
+
+ // The ID of your GCS object
+ // String objectName = "your-object-name";
+
+ // The path to the file to upload
+ // String filePath = "path/to/your/file";
+
+ try (Storage storage = StorageOptions.grpc().build().getService()) {
+ BlobId blobId = BlobId.of(bucketName, objectName);
+ BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
+
+ BlobAppendableUploadConfig config =
+ BlobAppendableUploadConfig.of().withCloseAction(CloseAction.CLOSE_WITHOUT_FINALIZING);
+ BlobAppendableUpload uploadSession = storage.blobAppendableUpload(blobInfo, config);
+ try (AppendableUploadWriteableByteChannel channel = uploadSession.open();
+ ReadableByteChannel readableByteChannel = FileChannel.open(Paths.get(filePath))) {
+ ByteStreams.copy(readableByteChannel, channel);
+ } catch (IOException ex) {
+ throw new IOException("Failed to upload to object " + blobId.toGsUtilUri(), ex);
+ }
+ BlobInfo result = storage.get(blobId);
+ System.out.printf(
+ Locale.US,
+ "Object %s successfully uploaded",
+ result.getBlobId().toGsUtilUriWithGeneration());
+ }
+ }
+}
+
+// [END storage_start_appendable_object_upload]
diff --git a/storage-shared-benchmarking/pom.xml b/storage-shared-benchmarking/pom.xml
index f43678d25e..ec0080c9b1 100644
--- a/storage-shared-benchmarking/pom.xml
+++ b/storage-shared-benchmarking/pom.xml
@@ -10,7 +10,7 @@
com.google.cloud
google-cloud-storage-parent
- 2.57.0
+ 2.58.0
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-storage
- 2.57.0
+ 2.58.0
tests
diff --git a/versions.txt b/versions.txt
index 5eff244cfc..1a8a97cccd 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,10 +1,10 @@
# Format:
# module:released-version:current-version
-google-cloud-storage:2.57.0:2.57.0
-gapic-google-cloud-storage-v2:2.57.0:2.57.0
-grpc-google-cloud-storage-v2:2.57.0:2.57.0
-proto-google-cloud-storage-v2:2.57.0:2.57.0
-google-cloud-storage-control:2.57.0:2.57.0
-proto-google-cloud-storage-control-v2:2.57.0:2.57.0
-grpc-google-cloud-storage-control-v2:2.57.0:2.57.0
+google-cloud-storage:2.58.0:2.58.0
+gapic-google-cloud-storage-v2:2.58.0:2.58.0
+grpc-google-cloud-storage-v2:2.58.0:2.58.0
+proto-google-cloud-storage-v2:2.58.0:2.58.0
+google-cloud-storage-control:2.58.0:2.58.0
+proto-google-cloud-storage-control-v2:2.58.0:2.58.0
+grpc-google-cloud-storage-control-v2:2.58.0:2.58.0