Repository: googleapis/java-storage
Pull request #2663 (2024-08-12 17:45:52)

fix: github workflow vulnerable to script injection
Hi! I'm Diogo from Google's Open Source Security Team([GOSST](https://opensource.googleblog.com/2023/04/googles-open-source-security-upstream-team-one-year-later.html)) and I'm dropping by to suggest this small change that will enhance the security of your repository by preventing script injection attacks through your GitHub workflows.

In the piece of code I changed, you were directly using the value of a variable that comes from a user's input, so a malicious user could exploit that input and use it to run arbitrary code. By using an intermediate environment variable, the value of the expression is stored in memory, used as a variable and doesn't interact with the script generation process. This mitigates the script injection risks and also keeps your workflow running exactly as before.

You can find more information about this on this [github documentation](https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#understanding-the-risk-of-script-injections) or in this [gitguardian blogpost](https://blog.gitguardian.com/github-actions-security-cheat-sheet/).

Cheers!

BenWhitehead: @diegomarquezp @blakeli0 Can you address the issue outlined here from @diogoteles08?

Patch:
diff --git a/.github/.OwlBot-hermetic.yaml b/.github/.OwlBot-hermetic.yaml
index b2261f48..5461fefe 100644
--- a/.github/.OwlBot-hermetic.yaml
+++ b/.github/.OwlBot-hermetic.yaml
@@ -11,10 +11,6 @@
 # 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.
-
-docker:
-  image: "gcr.io/cloud-devrel-public-resources/owlbot-java:latest"
-
 deep-preserve-regex:
 - "/google-.*/src/test/java/com/google/storage/control/v2/ITFoldersTest.java"
 
diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml
index cc49d69f..8b1779de 100644
--- a/.github/workflows/hermetic_library_generation.yaml
+++ b/.github/workflows/hermetic_library_generation.yaml
@@ -19,10 +19,14 @@ on:
     paths:
       - 'generation_config.yaml'
 
+
+env:
+  HEAD_REF: ${{ github.head_ref }}
+  REPO_FULL_NAME: ${{ github.event.pull_request.head.repo.full_name }}
+  GITHUB_REPOSITORY: ${{ github.repository }}
+
 jobs:
   library_generation:
-    # skip pull requests coming from a forked repository
-    if: github.event.pull_request.head.repo.full_name == github.repository
     runs-on: ubuntu-latest
     steps:
     - uses: actions/checkout@v4
@@ -32,11 +36,15 @@ jobs:
     - name: Generate changed libraries
       shell: bash
       run: |
-        set -x
+        set -ex
+        if [[ "${GITHUB_REPOSITORY}" != "${REPO_FULL_NAME}" ]]; then
+          echo "This PR comes from a fork. Generation will be skipped"
+          exit 0
+        fi
         [ -z "$(git config user.email)" ] && git config --global user.email "cloud-java-bot@google.com"
         [ -z "$(git config user.name)" ] && git config --global user.name "cloud-java-bot"
         bash .github/scripts/hermetic_library_generation.sh \
           --target_branch ${{ github.base_ref }} \
-          --current_branch ${{ github.head_ref }}
+          --current_branch $HEAD_REF
       env:
         GH_TOKEN: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }}
diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
index 35eacb9b..22525142 100644
--- a/.github/workflows/unmanaged_dependency_check.yaml
+++ b/.github/workflows/unmanaged_dependency_check.yaml
@@ -17,6 +17,6 @@ jobs:
           # repository
           .kokoro/build.sh
       - name: Unmanaged dependency check
-        uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.33.0
+        uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.34.0
         with:
           bom-path: google-cloud-storage-bom/pom.xml
diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-17.cfg
index 1b1612f6..a85e388b 100644
--- a/.kokoro/presubmit/graalvm-native-17.cfg
+++ b/.kokoro/presubmit/graalvm-native-17.cfg
@@ -3,7 +3,7 @@
 # Configure the docker image for kokoro-trampoline.
 env_vars: {
   key: "TRAMPOLINE_IMAGE"
-  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.33.0"
+  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.34.0"
 }
 
 env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg
index 8da4fbaf..7727e4a6 100644
--- a/.kokoro/presubmit/graalvm-native.cfg
+++ b/.kokoro/presubmit/graalvm-native.cfg
@@ -3,7 +3,7 @@
 # Configure the docker image for kokoro-trampoline.
 env_vars: {
   key: "TRAMPOLINE_IMAGE"
-  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.33.0"
+  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.34.0"
 }
 
 env_vars: {
diff --git a/.readme-partials.yaml b/.readme-partials.yaml
index 0cb64e02..52856675 100644
--- a/.readme-partials.yaml
+++ b/.readme-partials.yaml
@@ -6,13 +6,14 @@ custom_content: |
   The Storage Control API creates one space to perform metadata-specific, control plane, and long-running operations apart from the Storage API. Separating these operations from the Storage API improves API standardization and lets you run faster releases.
   
   If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
+  <!-- {x-version-update-start:libraries-bom:released} -->
   ```xml
   <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>com.google.cloud</groupId>
               <artifactId>libraries-bom</artifactId>
-              <version>26.37.0</version>
+              <version>26.44.0</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
@@ -21,30 +22,33 @@ custom_content: |
   
   <dependencies>
       <dependency>
-      <groupId>com.google.cloud</groupId>
-      <artifactId>google-cloud-storage-control</artifactId>
-  </dependency>
+          <groupId>com.google.cloud</groupId>
+          <artifactId>google-cloud-storage-control</artifactId>
+      </dependency>
+  </dependencies>
   ```
   
   If you are using Maven without the BOM, add this to your dependencies:
-  <!-- {x-version-update-start:google-cloud-storage:released} -->
+
+  <!-- {x-version-update-start:google-cloud-storage-control:released} -->
+
   ```xml
   <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage-control</artifactId>
-      <version>2.41.0</version><!-- {x-version-update:google-cloud-storage-control:current} -->
+      <version>2.41.0</version>
   </dependency>
   ```
   
   If you are using Gradle 5.x or later, add this to your dependencies:
   ```Groovy
-  implementation platform('com.google.cloud:libraries-bom:2.41.0')
+  implementation platform('com.google.cloud:libraries-bom:26.44.0')
   implementation 'com.google.cloud:google-cloud-storage-control'
   ```
   If you are using Gradle without BOM, add this to your dependencies:
   
   ```Groovy
-  implementation 'com.google.cloud:google-cloud-storage-control:2.41.0' <!-- {x-version-update:google-cloud-storage-control:current} -->
+  implementation 'com.google.cloud:google-cloud-storage-control:2.41.0'
   ```
   
   #### Creating an authorized service object
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a889954b..a0b3cd58 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,23 @@
 # Changelog
 
+## [2.42.0](https://github.com/googleapis/java-storage/compare/v2.41.0...v2.42.0) (2024-08-19)
+
+
+### Features
+
+* Enable grpc.lb.locality label for client-side metrics ([#2659](https://github.com/googleapis/java-storage/issues/2659)) ([b681ee0](https://github.com/googleapis/java-storage/commit/b681ee0d7c535db3dc4ede0c2b67bf2306aaf9f0))
+
+
+### Bug Fixes
+
+* Update modified field handling for blob and bucket with json transport to properly clear fields ([#2664](https://github.com/googleapis/java-storage/issues/2664)) ([e2f5537](https://github.com/googleapis/java-storage/commit/e2f553788eb3f3685056728de75c358893887604)), closes [#2662](https://github.com/googleapis/java-storage/issues/2662)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.34.0 ([#2673](https://github.com/googleapis/java-storage/issues/2673)) ([453c29a](https://github.com/googleapis/java-storage/commit/453c29abb8e970a1a639a39af3c0e3e8516fdda5))
+* Update gcr.io/cloud-devrel-public-resources/storage-testbench docker tag to v0.45.0 ([#2667](https://github.com/googleapis/java-storage/issues/2667)) ([1f66dff](https://github.com/googleapis/java-storage/commit/1f66dfff67dcab49596f25aa43651c7f098f12ad))
+
 ## [2.41.0](https://github.com/googleapis/java-storage/compare/v2.40.1...v2.41.0) (2024-07-31)
 
 
diff --git a/README.md b/README.md
index 5dd0bacd..b0806112 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>libraries-bom</artifactId>
-      <version>26.43.0</version>
+      <version>26.45.0</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
@@ -35,6 +35,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-control</artifactId>
   </dependency>
+</dependencies>
 
 ```
 
@@ -46,12 +47,12 @@ If you are using Maven without the BOM, add this to your dependencies:
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
-  <version>2.41.0</version>
+  <version>2.42.0</version>
 </dependency>
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage-control</artifactId>
-  <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+  <version>2.42.0</version>
 </dependency>
 
 ```
@@ -59,20 +60,20 @@ If you are using Maven without the BOM, add this to your dependencies:
 If you are using Gradle 5.x or later, add this to your dependencies:
 
 ```Groovy
-implementation platform('com.google.cloud:libraries-bom:2.41.0')
+implementation platform('com.google.cloud:libraries-bom:26.45.0')
 
 implementation 'com.google.cloud:google-cloud-storage'
 ```
 If you are using Gradle without BOM, add this to your dependencies:
 
 ```Groovy
-implementation 'com.google.cloud:google-cloud-storage:2.41.0'
+implementation 'com.google.cloud:google-cloud-storage:2.42.0'
 ```
 
 If you are using SBT, add this to your dependencies:
 
 ```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "2.41.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "2.42.0"
 ```
 <!-- {x-version-update-end} -->
 
@@ -115,13 +116,14 @@ The [Storage Control API](https://cloud.google.com/storage/docs/reference/rpc/)
 The Storage Control API creates one space to perform metadata-specific, control plane, and long-running operations apart from the Storage API. Separating these operations from the Storage API improves API standardization and lets you run faster releases.
 
 If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
+<!-- {x-version-update-start:libraries-bom:released} -->
 ```xml
 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>com.google.cloud</groupId>
             <artifactId>libraries-bom</artifactId>
-            <version>26.37.0</version>
+            <version>26.44.0</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
@@ -130,30 +132,33 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
 
 <dependencies>
     <dependency>
-    <groupId>com.google.cloud</groupId>
-    <artifactId>google-cloud-storage-control</artifactId>
-</dependency>
+        <groupId>com.google.cloud</groupId>
+        <artifactId>google-cloud-storage-control</artifactId>
+    </dependency>
+</dependencies>
 ```
 
 If you are using Maven without the BOM, add this to your dependencies:
-<!-- {x-version-update-start:google-cloud-storage:released} -->
+
+<!-- {x-version-update-start:google-cloud-storage-control:released} -->
+
 ```xml
 <dependency>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-control</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage-control:current} -->
+    <version>2.41.0</version>
 </dependency>
 ```
 
 If you are using Gradle 5.x or later, add this to your dependencies:
 ```Groovy
-implementation platform('com.google.cloud:libraries-bom:2.41.0')
+implementation platform('com.google.cloud:libraries-bom:26.44.0')
 implementation 'com.google.cloud:google-cloud-storage-control'
 ```
 If you are using Gradle without BOM, add this to your dependencies:
 
 ```Groovy
-implementation 'com.google.cloud:google-cloud-storage-control:2.41.0' <!-- {x-version-update:google-cloud-storage-control:current} -->
+implementation 'com.google.cloud:google-cloud-storage-control:2.41.0'
 ```
 
 #### Creating an authorized service object
@@ -277,7 +282,6 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-storage/tree/
 
 | Sample                      | Source Code                       | Try it |
 | --------------------------- | --------------------------------- | ------ |
-| Native Image Storage Sample | [source code](https://github.com/googleapis/java-storage/blob/main/samples/native-image-sample/src/main/java/com/example/storage/NativeImageStorageSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-storage&page=editor&open_in_editor=samples/native-image-sample/src/main/java/com/example/storage/NativeImageStorageSample.java) |
 | Configure Retries | [source code](https://github.com/googleapis/java-storage/blob/main/samples/snippets/src/main/java/com/example/storage/ConfigureRetries.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-storage&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/storage/ConfigureRetries.java) |
 | Generate Signed Post Policy V4 | [source code](https://github.com/googleapis/java-storage/blob/main/samples/snippets/src/main/java/com/example/storage/GenerateSignedPostPolicyV4.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-storage&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/storage/GenerateSignedPostPolicyV4.java) |
 | Get Service Account | [source code](https://github.com/googleapis/java-storage/blob/main/samples/snippets/src/main/java/com/example/storage/GetServiceAccount.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-storage&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/storage/GetServiceAccount.java) |
@@ -508,7 +512,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
 [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-storage/java11.html
 [stability-image]: https://img.shields.io/badge/stability-stable-green
 [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-storage.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-storage/2.41.0
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-storage/2.42.0
 [authentication]: https://github.com/googleapis/google-cloud-java#authentication
 [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
 [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/gapic-google-cloud-storage-v2/pom.xml b/gapic-google-cloud-storage-v2/pom.xml
index 7a22e710..3c863a82 100644
--- a/gapic-google-cloud-storage-v2/pom.xml
+++ b/gapic-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>gapic-google-cloud-storage-v2</artifactId>
-  <version>2.41.0-alpha</version><!-- {x-version-update:gapic-google-cloud-storage-v2:current} -->
+  <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:gapic-google-cloud-storage-v2:current} -->
   <name>gapic-google-cloud-storage-v2</name>
   <description>GRPC library for gapic-google-cloud-storage-v2</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageSettings.java b/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageSettings.java
index 8c3a2fdd..bac807d6 100644
--- a/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageSettings.java
+++ b/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageSettings.java
@@ -59,7 +59,9 @@ import javax.annotation.Generated;
  * <p>The builder of this class is recursive, so contained classes are themselves builders. When
  * build() is called, the tree of builders is called to create the complete settings object.
  *
- * <p>For example, to set the total timeout of deleteBucket to 30 seconds:
+ * <p>For example, to set the
+ * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings)
+ * of deleteBucket:
  *
  * <pre>{@code
  * // This snippet has been automatically generated and should be regarded as a code template only.
@@ -75,10 +77,21 @@ import javax.annotation.Generated;
  *             .deleteBucketSettings()
  *             .getRetrySettings()
  *             .toBuilder()
- *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
  *             .build());
  * StorageSettings storageSettings = storageSettingsBuilder.build();
  * }</pre>
+ *
+ * Please refer to the [Client Side Retry
+ * Guide](https://github.com/googleapis/google-cloud-java/blob/main/docs/client_retries.md) for
+ * additional support in setting retries.
  */
 @Generated("by gapic-generator-java")
 public class StorageSettings extends ClientSettings<StorageSettings> {
diff --git a/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/stub/StorageStubSettings.java b/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/stub/StorageStubSettings.java
index 3ced26a1..50535baa 100644
--- a/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/stub/StorageStubSettings.java
+++ b/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/stub/StorageStubSettings.java
@@ -121,7 +121,9 @@ import org.threeten.bp.Duration;
  * <p>The builder of this class is recursive, so contained classes are themselves builders. When
  * build() is called, the tree of builders is called to create the complete settings object.
  *
- * <p>For example, to set the total timeout of deleteBucket to 30 seconds:
+ * <p>For example, to set the
+ * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings)
+ * of deleteBucket:
  *
  * <pre>{@code
  * // This snippet has been automatically generated and should be regarded as a code template only.
@@ -137,10 +139,21 @@ import org.threeten.bp.Duration;
  *             .deleteBucketSettings()
  *             .getRetrySettings()
  *             .toBuilder()
- *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
  *             .build());
  * StorageStubSettings storageSettings = storageSettingsBuilder.build();
  * }</pre>
+ *
+ * Please refer to the [Client Side Retry
+ * Guide](https://github.com/googleapis/google-cloud-java/blob/main/docs/client_retries.md) for
+ * additional support in setting retries.
  */
 @Generated("by gapic-generator-java")
 public class StorageStubSettings extends StubSettings<StorageStubSettings> {
@@ -237,9 +250,7 @@ public class StorageStubSettings extends StubSettings<StorageStubSettings> {
 
             @Override
             public Iterable<Bucket> extractResources(ListBucketsResponse payload) {
-              return payload.getBucketsList() == null
-                  ? ImmutableList.<Bucket>of()
-                  : payload.getBucketsList();
+              return payload.getBucketsList();
             }
           };
 
@@ -282,9 +293,7 @@ public class StorageStubSettings extends StubSettings<StorageStubSettings> {
             @Override
             public Iterable<NotificationConfig> extractResources(
                 ListNotificationConfigsResponse payload) {
-              return payload.getNotificationConfigsList() == null
-                  ? ImmutableList.<NotificationConfig>of()
-                  : payload.getNotificationConfigsList();
+              return payload.getNotificationConfigsList();
             }
           };
 
@@ -318,9 +327,7 @@ public class StorageStubSettings extends StubSettings<StorageStubSettings> {
 
             @Override
             public Iterable<Object> extractResources(ListObjectsResponse payload) {
-              return payload.getObjectsList() == null
-                  ? ImmutableList.<Object>of()
-                  : payload.getObjectsList();
+              return payload.getObjectsList();
             }
           };
 
@@ -355,9 +362,7 @@ public class StorageStubSettings extends StubSettings<StorageStubSettings> {
 
             @Override
             public Iterable<HmacKeyMetadata> extractResources(ListHmacKeysResponse payload) {
-              return payload.getHmacKeysList() == null
-                  ? ImmutableList.<HmacKeyMetadata>of()
-                  : payload.getHmacKeysList();
+              return payload.getHmacKeysList();
             }
           };
 
diff --git a/gapic-google-cloud-storage-v2/src/main/resources/META-INF/native-image/com.google.storage.v2/reflect-config.json b/gapic-google-cloud-storage-v2/src/main/resources/META-INF/native-image/com.google.storage.v2/reflect-config.json
index 534ec435..f7e94466 100644
--- a/gapic-google-cloud-storage-v2/src/main/resources/META-INF/native-image/com.google.storage.v2/reflect-config.json
+++ b/gapic-google-cloud-storage-v2/src/main/resources/META-INF/native-image/com.google.storage.v2/reflect-config.json
@@ -305,6 +305,24 @@
     "allDeclaredClasses": true,
     "allPublicClasses": true
   },
+  {
+    "name": "com.google.api.PythonSettings$ExperimentalFeatures",
+    "queryAllDeclaredConstructors": true,
+    "queryAllPublicConstructors": true,
+    "queryAllDeclaredMethods": true,
+    "allPublicMethods": true,
+    "allDeclaredClasses": true,
+    "allPublicClasses": true
+  },
+  {
+    "name": "com.google.api.PythonSettings$ExperimentalFeatures$Builder",
+    "queryAllDeclaredConstructors": true,
+    "queryAllPublicConstructors": true,
+    "queryAllDeclaredMethods": true,
+    "allPublicMethods": true,
+    "allDeclaredClasses": true,
+    "allPublicClasses": true
+  },
   {
     "name": "com.google.api.ResourceDescriptor",
     "queryAllDeclaredConstructors": true,
diff --git a/generation_config.yaml b/generation_config.yaml
index 5e8d73b6..4fb6fc29 100644
--- a/generation_config.yaml
+++ b/generation_config.yaml
@@ -1,6 +1,6 @@
-gapic_generator_version: 2.43.0
-googleapis_commitish: d8fce50eea92bac3a6612ee61559989ce3b38776
-libraries_bom_version: 26.43.0
+gapic_generator_version: 2.45.0
+googleapis_commitish: cbf696d38a963c5ab333f85fc9a910b5698ad415
+libraries_bom_version: 26.45.0
 libraries:
   - api_shortname: storage
     name_pretty: Cloud Storage
diff --git a/google-cloud-storage-bom/pom.xml b/google-cloud-storage-bom/pom.xml
index 28c2f85e..261d4c13 100644
--- a/google-cloud-storage-bom/pom.xml
+++ b/google-cloud-storage-bom/pom.xml
@@ -19,12 +19,12 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage-bom</artifactId>
-  <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+  <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   <packaging>pom</packaging>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>sdk-platform-java-config</artifactId>
-    <version>3.33.0</version>
+    <version>3.34.0</version>
     <relativePath/>
   </parent>
 
@@ -69,37 +69,37 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-storage</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>gapic-google-cloud-storage-v2</artifactId>
-        <version>2.41.0-alpha</version><!-- {x-version-update:gapic-google-cloud-storage-v2:current} -->
+        <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:gapic-google-cloud-storage-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>grpc-google-cloud-storage-v2</artifactId>
-        <version>2.41.0-alpha</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
+        <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-storage-v2</artifactId>
-        <version>2.41.0-alpha</version><!-- {x-version-update:proto-google-cloud-storage-v2:current} -->
+        <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-storage-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-storage-control</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:google-cloud-storage-control:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage-control:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>grpc-google-cloud-storage-control-v2</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:grpc-google-cloud-storage-control-v2:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-control-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-storage-control-v2</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:proto-google-cloud-storage-control-v2:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-storage-control-v2:current} -->
       </dependency>
     </dependencies>
   </dependencyManagement>
diff --git a/google-cloud-storage-control/pom.xml b/google-cloud-storage-control/pom.xml
index fe1aa8ed..29f8c8a6 100644
--- a/google-cloud-storage-control/pom.xml
+++ b/google-cloud-storage-control/pom.xml
@@ -5,13 +5,13 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-control</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage-control:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage-control:current} -->
     <name>google-cloud-storage-control</name>
     <description>GRPC library for google-cloud-storage-control</description>
     <parent>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-storage-parent</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
     </parent>
 
     <dependencies>
diff --git a/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/StorageControlSettings.java b/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/StorageControlSettings.java
index d63f5272..6c2d1788 100644
--- a/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/StorageControlSettings.java
+++ b/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/StorageControlSettings.java
@@ -52,7 +52,9 @@ import javax.annotation.Generated;
  * <p>The builder of this class is recursive, so contained classes are themselves builders. When
  * build() is called, the tree of builders is called to create the complete settings object.
  *
- * <p>For example, to set the total timeout of createFolder to 30 seconds:
+ * <p>For example, to set the
+ * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings)
+ * of createFolder:
  *
  * <pre>{@code
  * // This snippet has been automatically generated and should be regarded as a code template only.
@@ -69,10 +71,47 @@ import javax.annotation.Generated;
  *             .createFolderSettings()
  *             .getRetrySettings()
  *             .toBuilder()
- *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
  *             .build());
  * StorageControlSettings storageControlSettings = storageControlSettingsBuilder.build();
  * }</pre>
+ *
+ * Please refer to the [Client Side Retry
+ * Guide](https://github.com/googleapis/google-cloud-java/blob/main/docs/client_retries.md) for
+ * additional support in setting retries.
+ *
+ * <p>To configure the RetrySettings of a Long Running Operation method, create an
+ * OperationTimedPollAlgorithm object and update the RPC's polling algorithm. For example, to
+ * configure the RetrySettings for renameFolder:
+ *
+ * <pre>{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * StorageControlSettings.Builder storageControlSettingsBuilder =
+ *     StorageControlSettings.newBuilder();
+ * TimedRetryAlgorithm timedRetryAlgorithm =
+ *     OperationalTimedPollAlgorithm.create(
+ *         RetrySettings.newBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofMillis(500))
+ *             .setRetryDelayMultiplier(1.5)
+ *             .setMaxRetryDelay(Duration.ofMillis(5000))
+ *             .setTotalTimeoutDuration(Duration.ofHours(24))
+ *             .build());
+ * storageControlSettingsBuilder
+ *     .createClusterOperationSettings()
+ *     .setPollingAlgorithm(timedRetryAlgorithm)
+ *     .build();
+ * }</pre>
  */
 @Generated("by gapic-generator-java")
 public class StorageControlSettings extends ClientSettings<StorageControlSettings> {
diff --git a/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/stub/StorageControlStubSettings.java b/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/stub/StorageControlStubSettings.java
index b9231bb5..b0bb3ca7 100644
--- a/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/stub/StorageControlStubSettings.java
+++ b/google-cloud-storage-control/src/main/java/com/google/storage/control/v2/stub/StorageControlStubSettings.java
@@ -87,7 +87,9 @@ import org.threeten.bp.Duration;
  * <p>The builder of this class is recursive, so contained classes are themselves builders. When
  * build() is called, the tree of builders is called to create the complete settings object.
  *
- * <p>For example, to set the total timeout of createFolder to 30 seconds:
+ * <p>For example, to set the
+ * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings)
+ * of createFolder:
  *
  * <pre>{@code
  * // This snippet has been automatically generated and should be regarded as a code template only.
@@ -104,10 +106,47 @@ import org.threeten.bp.Duration;
  *             .createFolderSettings()
  *             .getRetrySettings()
  *             .toBuilder()
- *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
  *             .build());
  * StorageControlStubSettings storageControlSettings = storageControlSettingsBuilder.build();
  * }</pre>
+ *
+ * Please refer to the [Client Side Retry
+ * Guide](https://github.com/googleapis/google-cloud-java/blob/main/docs/client_retries.md) for
+ * additional support in setting retries.
+ *
+ * <p>To configure the RetrySettings of a Long Running Operation method, create an
+ * OperationTimedPollAlgorithm object and update the RPC's polling algorithm. For example, to
+ * configure the RetrySettings for renameFolder:
+ *
+ * <pre>{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * StorageControlStubSettings.Builder storageControlSettingsBuilder =
+ *     StorageControlStubSettings.newBuilder();
+ * TimedRetryAlgorithm timedRetryAlgorithm =
+ *     OperationalTimedPollAlgorithm.create(
+ *         RetrySettings.newBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofMillis(500))
+ *             .setRetryDelayMultiplier(1.5)
+ *             .setMaxRetryDelay(Duration.ofMillis(5000))
+ *             .setTotalTimeoutDuration(Duration.ofHours(24))
+ *             .build());
+ * storageControlSettingsBuilder
+ *     .createClusterOperationSettings()
+ *     .setPollingAlgorithm(timedRetryAlgorithm)
+ *     .build();
+ * }</pre>
  */
 @Generated("by gapic-generator-java")
 public class StorageControlStubSettings extends StubSettings<StorageControlStubSettings> {
@@ -168,9 +207,7 @@ public class StorageControlStubSettings extends StubSettings<StorageControlStubS
 
             @Override
             public Iterable<Folder> extractResources(ListFoldersResponse payload) {
-              return payload.getFoldersList() == null
-                  ? ImmutableList.<Folder>of()
-                  : payload.getFoldersList();
+              return payload.getFoldersList();
             }
           };
 
@@ -208,9 +245,7 @@ public class StorageControlStubSettings extends StubSettings<StorageControlStubS
 
             @Override
             public Iterable<ManagedFolder> extractResources(ListManagedFoldersResponse payload) {
-              return payload.getManagedFoldersList() == null
-                  ? ImmutableList.<ManagedFolder>of()
-                  : payload.getManagedFoldersList();
+              return payload.getManagedFoldersList();
             }
           };
 
diff --git a/google-cloud-storage-control/src/main/resources/META-INF/native-image/com.google.storage.control.v2/reflect-config.json b/google-cloud-storage-control/src/main/resources/META-INF/native-image/com.google.storage.control.v2/reflect-config.json
index c10085e0..24bff013 100644
--- a/google-cloud-storage-control/src/main/resources/META-INF/native-image/com.google.storage.control.v2/reflect-config.json
+++ b/google-cloud-storage-control/src/main/resources/META-INF/native-image/com.google.storage.control.v2/reflect-config.json
@@ -332,6 +332,24 @@
     "allDeclaredClasses": true,
     "allPublicClasses": true
   },
+  {
+    "name": "com.google.api.PythonSettings$ExperimentalFeatures",
+    "queryAllDeclaredConstructors": true,
+    "queryAllPublicConstructors": true,
+    "queryAllDeclaredMethods": true,
+    "allPublicMethods": true,
+    "allDeclaredClasses": true,
+    "allPublicClasses": true
+  },
+  {
+    "name": "com.google.api.PythonSettings$ExperimentalFeatures$Builder",
+    "queryAllDeclaredConstructors": true,
+    "queryAllPublicConstructors": true,
+    "queryAllDeclaredMethods": true,
+    "allPublicMethods": true,
+    "allDeclaredClasses": true,
+    "allPublicClasses": true
+  },
   {
     "name": "com.google.api.ResourceDescriptor",
     "queryAllDeclaredConstructors": true,
diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml
index faff7b2a..24893497 100644
--- a/google-cloud-storage/pom.xml
+++ b/google-cloud-storage/pom.xml
@@ -2,7 +2,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <artifactId>google-cloud-storage</artifactId>
-  <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+  <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   <packaging>jar</packaging>
   <name>Google Cloud Storage</name>
   <url>https://github.com/googleapis/java-storage</url>
@@ -12,12 +12,11 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
   <properties>
     <site.installationModule>google-cloud-storage</site.installationModule>
-    <pubsub-proto.version>1.114.0</pubsub-proto.version>
-    <junit-platform.version>5.10.3</junit-platform.version>
+    <pubsub-proto.version>1.114.1</pubsub-proto.version>
   </properties>
   <dependencies>
     <dependency>
@@ -225,14 +224,14 @@
     <dependency>
       <groupId>com.google.api.grpc</groupId>
       <artifactId>proto-google-cloud-kms-v1</artifactId>
-      <version>0.141.0</version>
+      <version>0.142.0</version>
       <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-kms</artifactId>
-      <version>2.50.0</version>
+      <version>2.51.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -294,15 +293,14 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>net.jqwik</groupId>
-      <artifactId>jqwik</artifactId>
-      <version>1.9.0</version>
+      <groupId>org.junit.vintage</groupId>
+      <artifactId>junit-vintage-engine</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <version>${junit-platform.version}</version>
+      <groupId>net.jqwik</groupId>
+      <artifactId>jqwik</artifactId>
+      <version>1.9.0</version>
       <scope>test</scope>
     </dependency>
 
@@ -399,13 +397,11 @@
         <dependency>
           <groupId>org.junit.vintage</groupId>
           <artifactId>junit-vintage-engine</artifactId>
-          <version>${junit-platform.version}</version>
           <scope>test</scope>
         </dependency>
         <dependency>
           <groupId>org.junit.jupiter</groupId>
           <artifactId>junit-jupiter-engine</artifactId>
-          <version>${junit-platform.version}</version>
           <scope>test</scope>
         </dependency>
       </dependencies>
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiBlobWriteSessionConfig.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiBlobWriteSessionConfig.java
index 7a80fed4..e8ba2f3c 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiBlobWriteSessionConfig.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiBlobWriteSessionConfig.java
@@ -114,7 +114,7 @@ public final class BidiBlobWriteSessionConfig extends BlobWriteSessionConfig
                       BidiWriteObjectRequest req = grpc.getBidiWriteObjectRequest(info, opts);
 
                       ApiFuture<BidiResumableWrite> startResumableWrite =
-                          grpc.startResumableWrite(grpcCallContext, req);
+                          grpc.startResumableWrite(grpcCallContext, req, opts);
                       return ResumableMedia.gapic()
                           .write()
                           .bidiByteChannel(grpc.storageClient.bidiWriteObjectCallable())
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/DefaultBlobWriteSessionConfig.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/DefaultBlobWriteSessionConfig.java
index 5a7ef181..9ab421bd 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/DefaultBlobWriteSessionConfig.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/DefaultBlobWriteSessionConfig.java
@@ -156,7 +156,7 @@ public final class DefaultBlobWriteSessionConfig extends BlobWriteSessionConfig
                       WriteObjectRequest req = grpc.getWriteObjectRequest(info, opts);
 
                       ApiFuture<ResumableWrite> startResumableWrite =
-                          grpc.startResumableWrite(grpcCallContext, req);
+                          grpc.startResumableWrite(grpcCallContext, req, opts);
                       return ResumableMedia.gapic()
                           .write()
                           .byteChannel(
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicBidiUnbufferedWritableByteChannel.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicBidiUnbufferedWritableByteChannel.java
index 15278616..c3abe7b0 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicBidiUnbufferedWritableByteChannel.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicBidiUnbufferedWritableByteChannel.java
@@ -24,6 +24,7 @@ import com.google.api.gax.retrying.ResultRetryAlgorithm;
 import com.google.api.gax.rpc.ApiException;
 import com.google.api.gax.rpc.ApiStreamObserver;
 import com.google.api.gax.rpc.BidiStreamingCallable;
+import com.google.api.gax.rpc.ErrorDetails;
 import com.google.api.gax.rpc.OutOfRangeException;
 import com.google.cloud.storage.ChunkSegmenter.ChunkSegment;
 import com.google.cloud.storage.Conversions.Decoder;
@@ -345,10 +346,17 @@ final class GapicBidiUnbufferedWritableByteChannel implements UnbufferedWritable
     public void onError(Throwable t) {
       if (t instanceof OutOfRangeException) {
         OutOfRangeException oore = (OutOfRangeException) t;
-        clientDetectedError(
-            ResumableSessionFailureScenario.SCENARIO_5.toStorageException(
-                ImmutableList.of(lastWrittenRequest), null, context, oore));
-      } else if (t instanceof ApiException) {
+        ErrorDetails ed = oore.getErrorDetails();
+        if (!(ed != null
+            && ed.getErrorInfo() != null
+            && ed.getErrorInfo().getReason().equals("GRPC_MISMATCHED_UPLOAD_SIZE"))) {
+          clientDetectedError(
+              ResumableSessionFailureScenario.SCENARIO_5.toStorageException(
+                  ImmutableList.of(lastWrittenRequest), null, context, oore));
+          return;
+        }
+      }
+      if (t instanceof ApiException) {
         // use StorageExceptions logic to translate from ApiException to our status codes ensuring
         // things fall in line with our retry handlers.
         // This is suboptimal, as it will initialize a second exception, however this is the
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedChunkedResumableWritableByteChannel.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedChunkedResumableWritableByteChannel.java
index 6acac1e6..e7697ed7 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedChunkedResumableWritableByteChannel.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedChunkedResumableWritableByteChannel.java
@@ -24,6 +24,7 @@ import com.google.api.gax.retrying.ResultRetryAlgorithm;
 import com.google.api.gax.rpc.ApiException;
 import com.google.api.gax.rpc.ApiStreamObserver;
 import com.google.api.gax.rpc.ClientStreamingCallable;
+import com.google.api.gax.rpc.ErrorDetails;
 import com.google.api.gax.rpc.OutOfRangeException;
 import com.google.cloud.storage.ChunkSegmenter.ChunkSegment;
 import com.google.cloud.storage.Conversions.Decoder;
@@ -267,11 +268,18 @@ final class GapicUnbufferedChunkedResumableWritableByteChannel
       if (t instanceof OutOfRangeException) {
         OutOfRangeException oore = (OutOfRangeException) t;
         open = false;
-        StorageException storageException =
-            ResumableSessionFailureScenario.SCENARIO_5.toStorageException(
-                segments, null, context, oore);
-        invocationHandle.setException(storageException);
-      } else if (t instanceof ApiException) {
+        ErrorDetails ed = oore.getErrorDetails();
+        if (!(ed != null
+            && ed.getErrorInfo() != null
+            && ed.getErrorInfo().getReason().equals("GRPC_MISMATCHED_UPLOAD_SIZE"))) {
+          StorageException storageException =
+              ResumableSessionFailureScenario.SCENARIO_5.toStorageException(
+                  segments, null, context, oore);
+          invocationHandle.setException(storageException);
+          return;
+        }
+      }
+      if (t instanceof ApiException) {
         // use StorageExceptions logic to translate from ApiException to our status codes ensuring
         // things fall in line with our retry handlers.
         // This is suboptimal, as it will initialize a second exception, however this is the
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java
index ecaa3bc8..8904dce6 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java
@@ -182,6 +182,7 @@ final class GapicUnbufferedReadableByteChannel
         if (!result.isDone()) {
           result.setException(StorageException.coalesce(e));
         }
+        reset();
         throw e;
       }
     }
@@ -194,6 +195,7 @@ final class GapicUnbufferedReadableByteChannel
         if (!result.isDone()) {
           result.setException(StorageException.coalesce(e));
         }
+        reset();
         throw e;
       }
     }
@@ -201,8 +203,23 @@ final class GapicUnbufferedReadableByteChannel
     @Override
     public void close() {
       if (serverStream != null) {
-        // todo: do we need to "drain" anything?
         serverStream.cancel();
+        if (responseIterator != null) {
+          IOException ioException = null;
+          while (responseIterator.hasNext()) {
+            try {
+              ReadObjectResponse next = responseIterator.next();
+              ResponseContentLifecycleHandle handle = rclm.get(next);
+              handle.close();
+            } catch (IOException e) {
+              if (ioException == null) {
+                ioException = e;
+              } else if (ioException != e) {
+                ioException.addSuppressed(e);
+              }
+            }
+          }
+        }
       }
     }
 
@@ -223,5 +240,11 @@ final class GapicUnbufferedReadableByteChannel
         }
       }
     }
+
+    private void reset() {
+      serverStream = null;
+      responseIterator = null;
+      streamInitialized = false;
+    }
   }
 }
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUploadSessionBuilder.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUploadSessionBuilder.java
index 2d1daa54..3ae9b8bc 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUploadSessionBuilder.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUploadSessionBuilder.java
@@ -21,6 +21,8 @@ import com.google.api.core.ApiFutures;
 import com.google.api.gax.rpc.BidiStreamingCallable;
 import com.google.api.gax.rpc.ClientStreamingCallable;
 import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.storage.UnifiedOpts.ObjectTargetOpt;
+import com.google.cloud.storage.UnifiedOpts.Opts;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.storage.v2.BidiWriteObjectRequest;
 import com.google.storage.v2.BidiWriteObjectResponse;
@@ -50,7 +52,8 @@ final class GapicUploadSessionBuilder {
 
   ApiFuture<ResumableWrite> resumableWrite(
       UnaryCallable<StartResumableWriteRequest, StartResumableWriteResponse> callable,
-      WriteObjectRequest writeObjectRequest) {
+      WriteObjectRequest writeObjectRequest,
+      Opts<ObjectTargetOpt> opts) {
     StartResumableWriteRequest.Builder b = StartResumableWriteRequest.newBuilder();
     if (writeObjectRequest.hasWriteObjectSpec()) {
       b.setWriteObjectSpec(writeObjectRequest.getWriteObjectSpec());
@@ -61,7 +64,7 @@ final class GapicUploadSessionBuilder {
     if (writeObjectRequest.hasObjectChecksums()) {
       b.setObjectChecksums(writeObjectRequest.getObjectChecksums());
     }
-    StartResumableWriteRequest req = b.build();
+    StartResumableWriteRequest req = opts.startResumableWriteRequest().apply(b).build();
     Function<String, WriteObjectRequest> f =
         uploadId ->
             writeObjectRequest.toBuilder().clearWriteObjectSpec().setUploadId(uploadId).build();
@@ -80,7 +83,8 @@ final class GapicUploadSessionBuilder {
 
   ApiFuture<BidiResumableWrite> bidiResumableWrite(
       UnaryCallable<StartResumableWriteRequest, StartResumableWriteResponse> x,
-      BidiWriteObjectRequest writeObjectRequest) {
+      BidiWriteObjectRequest writeObjectRequest,
+      Opts<ObjectTargetOpt> opts) {
     StartResumableWriteRequest.Builder b = StartResumableWriteRequest.newBuilder();
     if (writeObjectRequest.hasWriteObjectSpec()) {
       b.setWriteObjectSpec(writeObjectRequest.getWriteObjectSpec());
@@ -91,7 +95,7 @@ final class GapicUploadSessionBuilder {
     if (writeObjectRequest.hasObjectChecksums()) {
       b.setObjectChecksums(writeObjectRequest.getObjectChecksums());
     }
-    StartResumableWriteRequest req = b.build();
+    StartResumableWriteRequest req = opts.startResumableWriteRequest().apply(b).build();
     Function<String, BidiWriteObjectRequest> f =
         uploadId ->
             writeObjectRequest.toBuilder().clearWriteObjectSpec().setUploadId(uploadId).build();
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java
index 0d0904ca..022a3cc1 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java
@@ -320,7 +320,7 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
     ClientStreamingCallable<WriteObjectRequest, WriteObjectResponse> write =
         storageClient.writeObjectCallable().withDefaultCallContext(grpcCallContext);
 
-    ApiFuture<ResumableWrite> start = startResumableWrite(grpcCallContext, req);
+    ApiFuture<ResumableWrite> start = startResumableWrite(grpcCallContext, req, opts);
     ApiFuture<GrpcResumableSession> session2 =
         ApiFutures.transform(
             start,
@@ -365,7 +365,7 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
         opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
     WriteObjectRequest req = getWriteObjectRequest(blobInfo, opts);
 
-    ApiFuture<ResumableWrite> start = startResumableWrite(grpcCallContext, req);
+    ApiFuture<ResumableWrite> start = startResumableWrite(grpcCallContext, req, opts);
 
     BufferedWritableByteChannelSession<WriteObjectResponse> session =
         ResumableMedia.gapic()
@@ -790,7 +790,7 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
     // in JSON, the starting of the resumable session happens before the invocation of write can
     // happen. Emulate the same thing here.
     //  1. create the future
-    ApiFuture<ResumableWrite> startResumableWrite = startResumableWrite(grpcCallContext, req);
+    ApiFuture<ResumableWrite> startResumableWrite = startResumableWrite(grpcCallContext, req, opts);
     //  2. await the result of the future
     ResumableWrite resumableWrite = ApiFutureUtils.await(startResumableWrite);
     //  3. wrap the result in another future container before constructing the BlobWriteChannel
@@ -1919,7 +1919,7 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
 
   @VisibleForTesting
   ApiFuture<ResumableWrite> startResumableWrite(
-      GrpcCallContext grpcCallContext, WriteObjectRequest req) {
+      GrpcCallContext grpcCallContext, WriteObjectRequest req, Opts<ObjectTargetOpt> opts) {
     Set<StatusCode.Code> codes = resultRetryAlgorithmToCodes(retryAlgorithmManager.getFor(req));
     GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
     return ResumableMedia.gapic()
@@ -1928,11 +1928,12 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
             storageClient
                 .startResumableWriteCallable()
                 .withDefaultCallContext(merge.withRetryableCodes(codes)),
-            req);
+            req,
+            opts);
   }
 
   ApiFuture<BidiResumableWrite> startResumableWrite(
-      GrpcCallContext grpcCallContext, BidiWriteObjectRequest req) {
+      GrpcCallContext grpcCallContext, BidiWriteObjectRequest req, Opts<ObjectTargetOpt> opts) {
     Set<StatusCode.Code> codes = resultRetryAlgorithmToCodes(retryAlgorithmManager.getFor(req));
     GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
     return ResumableMedia.gapic()
@@ -1941,7 +1942,8 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
             storageClient
                 .startResumableWriteCallable()
                 .withDefaultCallContext(merge.withRetryableCodes(codes)),
-            req);
+            req,
+            opts);
   }
 
   private SourceObject sourceObjectEncode(SourceBlob from) {
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageOptions.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageOptions.java
index 64376cc1..90f16bca 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageOptions.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageOptions.java
@@ -70,7 +70,6 @@ import com.google.storage.v2.StorageClient;
 import com.google.storage.v2.StorageSettings;
 import com.google.storage.v2.stub.GrpcStorageCallableFactory;
 import com.google.storage.v2.stub.GrpcStorageStub;
-import com.google.storage.v2.stub.StorageStub;
 import com.google.storage.v2.stub.StorageStubSettings;
 import io.grpc.ClientInterceptor;
 import io.grpc.Detachable;
@@ -89,9 +88,9 @@ import java.nio.ByteBuffer;
 import java.time.Clock;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.IdentityHashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -908,9 +907,27 @@ public final class GrpcStorageOptions extends StorageOptions
 
   private static final class InternalStorageClient extends StorageClient {
 
-    private InternalStorageClient(StorageStub stub) {
+    private InternalStorageClient(InternalZeroCopyGrpcStorageStub stub) {
       super(stub);
     }
+
+    @Override
+    public void shutdownNow() {
+      try {
+        // GrpcStorageStub#close() is final and we can't override it
+        // instead hook in here to close out the zero-copy marshaller
+        getStub().getObjectMediaResponseMarshaller.close();
+      } catch (IOException e) {
+        throw new RuntimeException(e);
+      } finally {
+        super.shutdownNow();
+      }
+    }
+
+    @Override
+    public InternalZeroCopyGrpcStorageStub getStub() {
+      return (InternalZeroCopyGrpcStorageStub) super.getStub();
+    }
   }
 
   private static final class InternalZeroCopyGrpcStorageStub extends GrpcStorageStub
@@ -1071,30 +1088,21 @@ public final class GrpcStorageOptions extends StorageOptions
      * them all as suppressed exceptions on the first occurrence.
      */
     @VisibleForTesting
-    static void closeAllStreams(Collection<InputStream> inputStreams) throws IOException {
-      IOException ioException =
-          inputStreams.stream()
-              .map(
-                  stream -> {
-                    try {
-                      stream.close();
-                      return null;
-                    } catch (IOException e) {
-                      return e;
-                    }
-                  })
-              .filter(Objects::nonNull)
-              .reduce(
-                  null,
-                  (l, r) -> {
-                    if (l != null) {
-                      l.addSuppressed(r);
-                      return l;
-                    } else {
-                      return r;
-                    }
-                  },
-                  (l, r) -> l);
+    static void closeAllStreams(Iterable<InputStream> inputStreams) throws IOException {
+      Iterator<InputStream> iterator = inputStreams.iterator();
+      IOException ioException = null;
+      while (iterator.hasNext()) {
+        InputStream next = iterator.next();
+        try {
+          next.close();
+        } catch (IOException e) {
+          if (ioException == null) {
+            ioException = e;
+          } else if (ioException != e) {
+            ioException.addSuppressed(e);
+          }
+        }
+      }
 
       if (ioException != null) {
         throw ioException;
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/JournalingBlobWriteSessionConfig.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/JournalingBlobWriteSessionConfig.java
index 7d0e46ce..499b9dce 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/JournalingBlobWriteSessionConfig.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/JournalingBlobWriteSessionConfig.java
@@ -190,7 +190,7 @@ public final class JournalingBlobWriteSessionConfig extends BlobWriteSessionConf
             opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
         ApiFuture<ResumableWrite> f =
             grpcStorage.startResumableWrite(
-                grpcCallContext, grpcStorage.getWriteObjectRequest(info, opts));
+                grpcCallContext, grpcStorage.getWriteObjectRequest(info, opts), opts);
         ApiFuture<WriteCtx<ResumableWrite>> start =
             ApiFutures.transform(f, WriteCtx::new, MoreExecutors.directExecutor());
 
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonConversions.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonConversions.java
index 7f84db77..27444143 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonConversions.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonConversions.java
@@ -83,6 +83,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -1082,6 +1083,11 @@ final class JsonConversions {
     // various data level methods in the apiary model are hostile to ImmutableList, as it does not
     // provide a public default no args constructor. Instead, apiary uses ArrayList for all internal
     // representations of JSON Arrays.
-    return l -> l.stream().map(f).collect(Collectors.toList());
+    return l -> {
+      if (l == null) {
+        return ImmutableList.of();
+      }
+      return l.stream().filter(Objects::nonNull).map(f).collect(Collectors.toList());
+    };
   }
 }
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionPutTask.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionPutTask.java
index 9d3afa5a..149c7ad9 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionPutTask.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionPutTask.java
@@ -205,7 +205,8 @@ final class JsonResumableSessionPutTask
             && contentLength != null
             && contentLength > 0) {
           String errorMessage = cause.getContent().toLowerCase(Locale.US);
-          if (errorMessage.contains("content-range")) {
+          if (errorMessage.contains("content-range")
+              && !errorMessage.contains("earlier")) { // TODO: exclude "earlier request"
             StorageException se =
                 ResumableSessionFailureScenario.SCENARIO_5.toStorageException(
                     uploadId, response, cause, cause::getContent);
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig.java
index 33ff7399..49894738 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig.java
@@ -452,7 +452,7 @@ public final class ParallelCompositeUploadBlobWriteSessionConfig extends BlobWri
      */
     @BetaApi
     public static ExecutorSupplier cachedPool() {
-      return new CachedSupplier();
+      return CachedSupplier.INSTANCE;
     }
 
     /**
@@ -529,12 +529,18 @@ public final class ParallelCompositeUploadBlobWriteSessionConfig extends BlobWri
 
     private static class CachedSupplier extends ExecutorSupplier implements Serializable {
       private static final long serialVersionUID = 7768210719775319260L;
+      private static final CachedSupplier INSTANCE = new CachedSupplier();
 
       @Override
       Executor get() {
         ThreadFactory threadFactory = newThreadFactory();
         return Executors.newCachedThreadPool(threadFactory);
       }
+
+      /** prevent java serialization from using a new instance */
+      private Object readResolve() {
+        return INSTANCE;
+      }
     }
 
     private static class FixedSupplier extends ExecutorSupplier implements Serializable {
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadWritableByteChannel.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadWritableByteChannel.java
index 58e9bad0..db807ce6 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadWritableByteChannel.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ParallelCompositeUploadWritableByteChannel.java
@@ -43,6 +43,7 @@ import com.google.cloud.storage.UnifiedOpts.MetagenerationNotMatch;
 import com.google.cloud.storage.UnifiedOpts.ObjectSourceOpt;
 import com.google.cloud.storage.UnifiedOpts.ObjectTargetOpt;
 import com.google.cloud.storage.UnifiedOpts.Opts;
+import com.google.cloud.storage.UnifiedOpts.ResumableUploadExpectedObjectSize;
 import com.google.cloud.storage.UnifiedOpts.SourceGenerationMatch;
 import com.google.cloud.storage.UnifiedOpts.SourceGenerationNotMatch;
 import com.google.cloud.storage.UnifiedOpts.SourceMetagenerationMatch;
@@ -102,7 +103,8 @@ final class ParallelCompositeUploadWritableByteChannel implements BufferedWritab
                 || o instanceof SourceMetagenerationMatch
                 || o instanceof SourceMetagenerationNotMatch
                 || o instanceof Crc32cMatch
-                || o instanceof Md5Match;
+                || o instanceof Md5Match
+                || o instanceof ResumableUploadExpectedObjectSize;
     TO_EXCLUDE_FROM_PARTS = tmp.negate();
   }
 
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ResponseContentLifecycleManager.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ResponseContentLifecycleManager.java
index 32365133..732cc5cb 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ResponseContentLifecycleManager.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ResponseContentLifecycleManager.java
@@ -16,10 +16,15 @@
 package com.google.cloud.storage;
 
 import com.google.storage.v2.ReadObjectResponse;
+import java.io.Closeable;
+import java.io.IOException;
 
-interface ResponseContentLifecycleManager {
+interface ResponseContentLifecycleManager extends Closeable {
   ResponseContentLifecycleHandle get(ReadObjectResponse response);
 
+  @Override
+  default void close() throws IOException {}
+
   static ResponseContentLifecycleManager noop() {
     return response ->
         new ResponseContentLifecycleHandle(
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java
index fca1d129..70604593 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java
@@ -45,11 +45,13 @@ import com.google.cloud.storage.UnifiedOpts.HmacKeyListOpt;
 import com.google.cloud.storage.UnifiedOpts.HmacKeySourceOpt;
 import com.google.cloud.storage.UnifiedOpts.HmacKeyTargetOpt;
 import com.google.cloud.storage.UnifiedOpts.NamedField;
+import com.google.cloud.storage.UnifiedOpts.NestedNamedField;
 import com.google.cloud.storage.UnifiedOpts.ObjectListOpt;
 import com.google.cloud.storage.UnifiedOpts.ObjectSourceOpt;
 import com.google.cloud.storage.UnifiedOpts.ObjectTargetOpt;
 import com.google.cloud.storage.UnifiedOpts.Opts;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Streams;
@@ -62,9 +64,11 @@ import java.net.URL;
 import java.net.URLConnection;
 import java.nio.file.Path;
 import java.security.Key;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -73,6 +77,7 @@ import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
 import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
 
 /**
  * An interface for Google Cloud Storage.
@@ -106,80 +111,107 @@ public interface Storage extends Service<StorageOptions>, AutoCloseable {
 
   enum BucketField implements FieldSelector, NamedField {
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    ID("id", "bucket_id"),
+    ID("id", "bucket_id", String.class),
     @TransportCompatibility(Transport.HTTP)
-    SELF_LINK("selfLink"),
+    SELF_LINK("selfLink", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    NAME("name"),
+    NAME("name", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    TIME_CREATED("timeCreated", "create_time"),
+    TIME_CREATED("timeCreated", "create_time", com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    METAGENERATION("metageneration"),
+    METAGENERATION("metageneration", Long.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    ACL("acl"),
+    ACL("acl", ArrayList.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    DEFAULT_OBJECT_ACL("defaultObjectAcl", "default_object_acl"),
+    DEFAULT_OBJECT_ACL("defaultObjectAcl", "default_object_acl", ArrayList.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    OWNER("owner"),
+    OWNER("owner", com.google.api.services.storage.model.Bucket.Owner.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    LABELS("labels"),
+    LABELS("labels", HashMap.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    LOCATION("location"),
+    LOCATION("location", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    LOCATION_TYPE("locationType", "location_type"),
+    LOCATION_TYPE("locationType", "location_type", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    WEBSITE("website"),
+    WEBSITE("website", com.google.api.services.storage.model.Bucket.Website.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    VERSIONING("versioning"),
+    VERSIONING("versioning", com.google.api.services.storage.model.Bucket.Versioning.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CORS("cors"),
+    CORS("cors", ArrayList.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    LIFECYCLE("lifecycle"),
+    LIFECYCLE("lifecycle", com.google.api.services.storage.model.Bucket.Lifecycle.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    STORAGE_CLASS("storageClass", "storage_class"),
+    STORAGE_CLASS("storageClass", "storage_class", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    ETAG("etag"),
+    ETAG("etag", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    ENCRYPTION("encryption"),
+    ENCRYPTION("encryption", com.google.api.services.storage.model.Bucket.Encryption.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    BILLING("billing"),
+    BILLING("billing", com.google.api.services.storage.model.Bucket.Billing.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    DEFAULT_EVENT_BASED_HOLD("defaultEventBasedHold", "default_event_based_hold"),
+    DEFAULT_EVENT_BASED_HOLD("defaultEventBasedHold", "default_event_based_hold", Boolean.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    RETENTION_POLICY("retentionPolicy", "retention_policy"),
+    RETENTION_POLICY(
+        "retentionPolicy",
+        "retention_policy",
+        com.google.api.services.storage.model.Bucket.RetentionPolicy.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    IAMCONFIGURATION("iamConfiguration", "iam_config"),
+    IAMCONFIGURATION(
+        "iamConfiguration",
+        "iam_config",
+        com.google.api.services.storage.model.Bucket.IamConfiguration.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    LOGGING("logging"),
+    LOGGING("logging", com.google.api.services.storage.model.Bucket.Logging.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    UPDATED("updated", "update_time"),
+    UPDATED("updated", "update_time", com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    RPO("rpo"),
+    RPO("rpo", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CUSTOM_PLACEMENT_CONFIG("customPlacementConfig", "custom_placement_config"),
+    CUSTOM_PLACEMENT_CONFIG(
+        "customPlacementConfig",
+        "custom_placement_config",
+        com.google.api.services.storage.model.Bucket.CustomPlacementConfig.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    AUTOCLASS("autoclass"),
+    AUTOCLASS("autoclass", com.google.api.services.storage.model.Bucket.Autoclass.class),
 
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    HIERARCHICAL_NAMESPACE("hierarchicalNamespace", "hierarchical_namespace"),
+    HIERARCHICAL_NAMESPACE(
+        "hierarchicalNamespace",
+        "hierarchical_namespace",
+        com.google.api.services.storage.model.Bucket.HierarchicalNamespace.class),
     @TransportCompatibility({Transport.HTTP})
-    OBJECT_RETENTION("objectRetention"),
+    OBJECT_RETENTION(
+        "objectRetention", com.google.api.services.storage.model.Bucket.ObjectRetention.class),
 
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    SOFT_DELETE_POLICY("softDeletePolicy", "soft_delete_policy");
+    SOFT_DELETE_POLICY(
+        "softDeletePolicy",
+        "soft_delete_policy",
+        com.google.api.services.storage.model.Bucket.SoftDeletePolicy.class);
 
     static final List<BucketField> REQUIRED_FIELDS = ImmutableList.of(NAME);
+    private static final Map<String, BucketField> JSON_FIELD_NAME_INDEX;
+
+    static {
+      ImmutableMap.Builder<String, BucketField> tmp = ImmutableMap.builder();
+      for (BucketField field : values()) {
+        tmp.put(field.selector, field);
+      }
+      JSON_FIELD_NAME_INDEX = Utils.mapBuild(tmp);
+    }
 
     private final String selector;
     private final String grpcFieldName;
+    private final Class<?> jsonClass;
 
-    BucketField(String selector) {
-      this(selector, selector);
+    BucketField(String selector, Class<?> jsonClass) {
+      this(selector, selector, jsonClass);
     }
 
-    BucketField(String selector, String grpcFieldName) {
+    BucketField(String selector, String grpcFieldName, Class<?> jsonClass) {
       this.selector = selector;
       this.grpcFieldName = grpcFieldName;
+      this.jsonClass = jsonClass;
     }
 
     @Override
@@ -196,96 +228,129 @@ public interface Storage extends Service<StorageOptions>, AutoCloseable {
     public String getGrpcName() {
       return grpcFieldName;
     }
+
+    Class<?> getJsonClass() {
+      return jsonClass;
+    }
+
+    @Nullable
+    static BucketField lookup(NamedField nf) {
+      NamedField lookup = nf;
+      if (nf instanceof NestedNamedField) {
+        NestedNamedField nested = (NestedNamedField) nf;
+        lookup = nested.getParent();
+      }
+      return JSON_FIELD_NAME_INDEX.get(lookup.getApiaryName());
+    }
   }
 
   enum BlobField implements FieldSelector, NamedField {
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    ACL("acl"),
+    ACL("acl", com.google.api.services.storage.model.ObjectAccessControl.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    BUCKET("bucket"),
+    BUCKET("bucket", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CACHE_CONTROL("cacheControl", "cache_control"),
+    CACHE_CONTROL("cacheControl", "cache_control", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    COMPONENT_COUNT("componentCount", "component_count"),
+    COMPONENT_COUNT("componentCount", "component_count", Integer.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CONTENT_DISPOSITION("contentDisposition", "content_disposition"),
+    CONTENT_DISPOSITION("contentDisposition", "content_disposition", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CONTENT_ENCODING("contentEncoding", "content_encoding"),
+    CONTENT_ENCODING("contentEncoding", "content_encoding", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CONTENT_LANGUAGE("contentLanguage", "content_language"),
+    CONTENT_LANGUAGE("contentLanguage", "content_language", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CONTENT_TYPE("contentType", "content_type"),
+    CONTENT_TYPE("contentType", "content_type", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CRC32C("crc32c", "checksums.crc32c"),
+    CRC32C("crc32c", "checksums.crc32c", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    ETAG("etag"),
+    ETAG("etag", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    GENERATION("generation"),
+    GENERATION("generation", Long.class),
     @TransportCompatibility(Transport.HTTP)
-    ID("id"),
+    ID("id", String.class),
     /** {@code kind} is not exposed in {@link BlobInfo} or {@link Blob} no need to select it */
     @Deprecated
     @TransportCompatibility(Transport.HTTP)
-    KIND("kind"),
+    KIND("kind", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    MD5HASH("md5Hash", "checksums.md5_hash"),
+    MD5HASH("md5Hash", "checksums.md5_hash", String.class),
     @TransportCompatibility(Transport.HTTP)
-    MEDIA_LINK("mediaLink"),
+    MEDIA_LINK("mediaLink", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    METADATA("metadata"),
+    METADATA("metadata", HashMap.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    METAGENERATION("metageneration"),
+    METAGENERATION("metageneration", Long.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    NAME("name"),
+    NAME("name", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    OWNER("owner"),
+    OWNER("owner", com.google.api.services.storage.model.StorageObject.Owner.class),
     @TransportCompatibility(Transport.HTTP)
-    SELF_LINK("selfLink"),
+    SELF_LINK("selfLink", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    SIZE("size"),
+    SIZE("size", java.math.BigInteger.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    STORAGE_CLASS("storageClass", "storage_class"),
+    STORAGE_CLASS("storageClass", "storage_class", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    TIME_DELETED("timeDeleted", "delete_time"),
+    TIME_DELETED("timeDeleted", "delete_time", com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    TIME_CREATED("timeCreated", "create_time"),
+    TIME_CREATED("timeCreated", "create_time", com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    KMS_KEY_NAME("kmsKeyName", "kms_key"),
+    KMS_KEY_NAME("kmsKeyName", "kms_key", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    EVENT_BASED_HOLD("eventBasedHold", "event_based_hold"),
+    EVENT_BASED_HOLD("eventBasedHold", "event_based_hold", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    TEMPORARY_HOLD("temporaryHold", "temporary_hold"),
+    TEMPORARY_HOLD("temporaryHold", "temporary_hold", String.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    RETENTION_EXPIRATION_TIME("retentionExpirationTime", "retention_expire_time"),
+    RETENTION_EXPIRATION_TIME(
+        "retentionExpirationTime",
+        "retention_expire_time",
+        com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    UPDATED("updated", "update_time"),
+    UPDATED("updated", "update_time", com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CUSTOM_TIME("customTime", "custom_time"),
+    CUSTOM_TIME("customTime", "custom_time", com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    TIME_STORAGE_CLASS_UPDATED("timeStorageClassUpdated", "update_storage_class_time"),
+    TIME_STORAGE_CLASS_UPDATED(
+        "timeStorageClassUpdated",
+        "update_storage_class_time",
+        com.google.api.client.util.DateTime.class),
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    CUSTOMER_ENCRYPTION("customerEncryption", "customer_encryption"),
+    CUSTOMER_ENCRYPTION("customerEncryption", "customer_encryption", String.class),
     @TransportCompatibility({Transport.HTTP})
-    RETENTION("retention"),
+    RETENTION("retention", com.google.api.services.storage.model.StorageObject.Retention.class),
 
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    SOFT_DELETE_TIME("softDeleteTime", "soft_delete_time"),
+    SOFT_DELETE_TIME(
+        "softDeleteTime", "soft_delete_time", com.google.api.client.util.DateTime.class),
 
     @TransportCompatibility({Transport.HTTP, Transport.GRPC})
-    HARD_DELETE_TIME("hardDeleteTime", "hard_delete_time");
+    HARD_DELETE_TIME(
+        "hardDeleteTime", "hard_delete_time", com.google.api.client.util.DateTime.class);
 
     static final List<NamedField> REQUIRED_FIELDS = ImmutableList.of(BUCKET, NAME);
+    private static final Map<String, BlobField> JSON_FIELD_NAME_INDEX;
+
+    static {
+      ImmutableMap.Builder<String, BlobField> tmp = ImmutableMap.builder();
+      for (BlobField field : values()) {
+        tmp.put(field.selector, field);
+      }
+      JSON_FIELD_NAME_INDEX = Utils.mapBuild(tmp);
+    }
 
     private final String selector;
     private final String grpcFieldName;
+    private final Class<?> jsonClass;
 
-    BlobField(String selector) {
-      this(selector, selector);
+    BlobField(String selector, Class<?> jsonClass) {
+      this(selector, selector, jsonClass);
     }
 
-    BlobField(String selector, String grpcFieldName) {
+    BlobField(String selector, String grpcFieldName, Class<?> jsonClass) {
       this.selector = selector;
       this.grpcFieldName = grpcFieldName;
+      this.jsonClass = jsonClass;
     }
 
     @Override
@@ -302,6 +367,20 @@ public interface Storage extends Service<StorageOptions>, AutoCloseable {
     public String getGrpcName() {
       return grpcFieldName;
     }
+
+    Class<?> getJsonClass() {
+      return jsonClass;
+    }
+
+    @Nullable
+    static BlobField lookup(NamedField nf) {
+      NamedField lookup = nf;
+      if (nf instanceof NestedNamedField) {
+        NestedNamedField nested = (NestedNamedField) nf;
+        lookup = nested.getParent();
+      }
+      return JSON_FIELD_NAME_INDEX.get(lookup.getApiaryName());
+    }
   }
 
   enum UriScheme {
@@ -1273,6 +1352,23 @@ public interface Storage extends Service<StorageOptions>, AutoCloseable {
       return new BlobWriteOption(UnifiedOpts.detectContentType());
     }
 
+    /**
+     * Set a precondition on the number of bytes that GCS should expect for a resumable upload. See
+     * the docs for <a
+     * href="https://cloud.google.com/storage/docs/json_api/v1/parameters#xuploadcontentlength">X-Upload-Content-Length</a>
+     * for more detail.
+     *
+     * <p>If the method invoked with this option does not perform a resumable upload, this option
+     * will be ignored.
+     *
+     * @since 2.42.0
+     */
+    @BetaApi
+    @TransportCompatibility({Transport.HTTP, Transport.GRPC})
+    public static BlobWriteOption expectedObjectSize(long objectContentSize) {
+      return new BlobWriteOption(UnifiedOpts.resumableUploadExpectedObjectSize(objectContentSize));
+    }
+
     /**
      * Deduplicate any options which are the same parameter. The value which comes last in {@code
      * os} will be the value included in the return.
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java
index 5884a51e..c01742b8 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java
@@ -23,6 +23,7 @@ import static com.google.common.base.Preconditions.checkState;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.concurrent.Executors.callable;
 
+import com.google.api.client.util.Data;
 import com.google.api.core.ApiFuture;
 import com.google.api.gax.paging.Page;
 import com.google.api.gax.retrying.ResultRetryAlgorithm;
@@ -44,6 +45,8 @@ import com.google.cloud.storage.PostPolicyV4.ConditionV4Type;
 import com.google.cloud.storage.PostPolicyV4.PostConditionsV4;
 import com.google.cloud.storage.PostPolicyV4.PostFieldsV4;
 import com.google.cloud.storage.PostPolicyV4.PostPolicyV4Document;
+import com.google.cloud.storage.UnifiedOpts.NamedField;
+import com.google.cloud.storage.UnifiedOpts.NestedNamedField;
 import com.google.cloud.storage.UnifiedOpts.ObjectSourceOpt;
 import com.google.cloud.storage.UnifiedOpts.ObjectTargetOpt;
 import com.google.cloud.storage.UnifiedOpts.Opts;
@@ -91,6 +94,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Function;
 import java.util.function.Supplier;
+import java.util.stream.Stream;
 import org.checkerframework.checker.nullness.qual.NonNull;
 import org.checkerframework.checker.nullness.qual.Nullable;
 
@@ -497,11 +501,35 @@ final class StorageImpl extends BaseService<StorageOptions> implements Storage,
   public Bucket update(BucketInfo bucketInfo, BucketTargetOption... options) {
     Map<StorageRpc.Option, ?> optionsMap =
         Opts.unwrap(options).resolveFrom(bucketInfo).getRpcOptions();
-    if (bucketInfo.getModifiedFields().isEmpty()) {
+    ImmutableSet<NamedField> modifiedFields = bucketInfo.getModifiedFields();
+    if (modifiedFields.isEmpty()) {
       return internalBucketGet(bucketInfo.getName(), optionsMap);
     } else {
+      com.google.api.services.storage.model.Bucket tmp = codecs.bucketInfo().encode(bucketInfo);
       com.google.api.services.storage.model.Bucket bucketPb =
-          codecs.bucketInfo().encode(bucketInfo);
+          new com.google.api.services.storage.model.Bucket();
+      Stream.concat(modifiedFields.stream(), BucketField.REQUIRED_FIELDS.stream())
+          .map(
+              f -> {
+                if (f instanceof NestedNamedField) {
+                  return ((NestedNamedField) f).getParent();
+                } else {
+                  return f;
+                }
+              })
+          .forEach(
+              field -> {
+                String jsonName = field.getApiaryName();
+                if (tmp.containsKey(jsonName)) {
+                  bucketPb.put(jsonName, tmp.get(jsonName));
+                } else {
+                  BucketField lookup = BucketField.lookup(field);
+                  if (lookup != null) {
+                    bucketPb.put(jsonName, Data.nullOf(lookup.getJsonClass()));
+                  }
+                }
+              });
+
       ResultRetryAlgorithm<?> algorithm =
           retryAlgorithmManager.getForBucketsUpdate(bucketPb, optionsMap);
       return run(
@@ -515,7 +543,8 @@ final class StorageImpl extends BaseService<StorageOptions> implements Storage,
   public Blob update(BlobInfo blobInfo, BlobTargetOption... options) {
     Opts<ObjectTargetOpt> opts = Opts.unwrap(options).resolveFrom(blobInfo);
     Map<StorageRpc.Option, ?> optionsMap = opts.getRpcOptions();
-    boolean unmodifiedBeforeOpts = blobInfo.getModifiedFields().isEmpty();
+    ImmutableSet<NamedField> modifiedFields = blobInfo.getModifiedFields();
+    boolean unmodifiedBeforeOpts = modifiedFields.isEmpty();
     BlobInfo.Builder builder = blobInfo.toBuilder();
 
     // This is a workaround until everything is in prod for both json and grpc.
@@ -523,7 +552,7 @@ final class StorageImpl extends BaseService<StorageOptions> implements Storage,
     // request if it was modified, so that we don't send a null object in a
     // grpc or json request.
     // todo: b/308194853
-    if (blobInfo.getModifiedFields().contains(BlobField.RETENTION)) {
+    if (modifiedFields.contains(BlobField.RETENTION)) {
       builder.setRetention(blobInfo.getRetention());
     }
     BlobInfo updated = opts.blobInfoMapper().apply(builder).build();
@@ -531,7 +560,30 @@ final class StorageImpl extends BaseService<StorageOptions> implements Storage,
     if (unmodifiedBeforeOpts && unmodifiedAfterOpts) {
       return internalGetBlob(blobInfo.getBlobId(), optionsMap);
     } else {
-      StorageObject pb = codecs.blobInfo().encode(updated);
+      StorageObject tmp = codecs.blobInfo().encode(updated);
+      StorageObject pb = new StorageObject();
+      Stream.concat(modifiedFields.stream(), BlobField.REQUIRED_FIELDS.stream())
+          .map(
+              f -> {
+                if (f instanceof NestedNamedField) {
+                  return ((NestedNamedField) f).getParent();
+                } else {
+                  return f;
+                }
+              })
+          .forEach(
+              field -> {
+                String jsonName = field.getApiaryName();
+                if (tmp.containsKey(jsonName)) {
+                  pb.put(jsonName, tmp.get(jsonName));
+                } else {
+                  BlobField lookup = BlobField.lookup(field);
+                  if (lookup != null) {
+                    pb.put(jsonName, Data.nullOf(lookup.getJsonClass()));
+                  }
+                }
+              });
+
       ResultRetryAlgorithm<?> algorithm = retryAlgorithmManager.getForObjectsUpdate(pb, optionsMap);
       return run(
           algorithm,
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/UnifiedOpts.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/UnifiedOpts.java
index 16c76ef9..bcc987ea 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/UnifiedOpts.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/UnifiedOpts.java
@@ -55,6 +55,7 @@ import com.google.storage.v2.LockBucketRetentionPolicyRequest;
 import com.google.storage.v2.ReadObjectRequest;
 import com.google.storage.v2.RestoreObjectRequest;
 import com.google.storage.v2.RewriteObjectRequest;
+import com.google.storage.v2.StartResumableWriteRequest;
 import com.google.storage.v2.UpdateBucketRequest;
 import com.google.storage.v2.UpdateHmacKeyRequest;
 import com.google.storage.v2.UpdateObjectRequest;
@@ -196,6 +197,10 @@ final class UnifiedOpts {
     default Mapper<RewriteObjectRequest.Builder> rewriteObject() {
       return Mapper.identity();
     }
+
+    default Mapper<StartResumableWriteRequest.Builder> startResumableWrite() {
+      return Mapper.identity();
+    }
   }
 
   /** Base interface for those Opts which are applicable to Bucket List operations */
@@ -487,6 +492,12 @@ final class UnifiedOpts {
     return new Projection(projection);
   }
 
+  static ResumableUploadExpectedObjectSize resumableUploadExpectedObjectSize(
+      long expectedObjectSize) {
+    checkArgument(expectedObjectSize >= 0, "expectedObjectSize >= 0 (%s >= 0)", expectedObjectSize);
+    return new ResumableUploadExpectedObjectSize(expectedObjectSize);
+  }
+
   static SoftDeleted softDeleted(boolean softDeleted) {
     return new SoftDeleted(softDeleted);
   }
@@ -1832,6 +1843,25 @@ final class UnifiedOpts {
     }
   }
 
+  static final class ResumableUploadExpectedObjectSize extends RpcOptVal<@NonNull Long>
+      implements ObjectTargetOpt {
+    private static final long serialVersionUID = 3640126281492196357L;
+
+    private ResumableUploadExpectedObjectSize(@NonNull Long val) {
+      super(StorageRpc.Option.X_UPLOAD_CONTENT_LENGTH, val);
+    }
+
+    @Override
+    public Mapper<StartResumableWriteRequest.Builder> startResumableWrite() {
+      return b -> {
+        if (val > 0) {
+          b.getWriteObjectSpecBuilder().setObjectSize(val);
+        }
+        return b;
+      };
+    }
+  }
+
   static final class ShowDeletedKeys extends RpcOptVal<@NonNull Boolean> implements HmacKeyListOpt {
     private static final long serialVersionUID = -6604176744362903487L;
 
@@ -2301,21 +2331,6 @@ final class UnifiedOpts {
    */
   @SuppressWarnings("unchecked")
   static final class Opts<T extends Opt> {
-    private static final Function<ImmutableMap.Builder<?, ?>, ImmutableMap<?, ?>> mapBuild;
-
-    static {
-      Function<ImmutableMap.Builder<?, ?>, ImmutableMap<?, ?>> tmp;
-      // buildOrThrow was added in guava 31.0
-      // if it fails, fallback to the older build() method instead.
-      // The behavior was the same, but the new name makes the behavior clear
-      try {
-        ImmutableMap.builder().buildOrThrow();
-        tmp = ImmutableMap.Builder::buildOrThrow;
-      } catch (NoSuchMethodError e) {
-        tmp = ImmutableMap.Builder::build;
-      }
-      mapBuild = tmp;
-    }
 
     private final ImmutableList<T> opts;
 
@@ -2402,7 +2417,7 @@ final class UnifiedOpts {
     ImmutableMap<StorageRpc.Option, ?> getRpcOptions() {
       ImmutableMap.Builder<StorageRpc.Option, Object> builder =
           rpcOptionMapper().apply(ImmutableMap.builder());
-      return (ImmutableMap<StorageRpc.Option, ?>) mapBuild.apply(builder);
+      return Utils.mapBuild(builder);
     }
 
     Mapper<GrpcCallContext> grpcMetadataMapper() {
@@ -2441,6 +2456,10 @@ final class UnifiedOpts {
       return fuseMappers(ObjectTargetOpt.class, ObjectTargetOpt::bidiWriteObject);
     }
 
+    Mapper<StartResumableWriteRequest.Builder> startResumableWriteRequest() {
+      return fuseMappers(ObjectTargetOpt.class, ObjectTargetOpt::startResumableWrite);
+    }
+
     Mapper<GetObjectRequest.Builder> getObjectsRequest() {
       return fuseMappers(ObjectSourceOpt.class, ObjectSourceOpt::getObject);
     }
@@ -2798,7 +2817,7 @@ final class UnifiedOpts {
     }
   }
 
-  private static final class NestedNamedField implements NamedField {
+  static final class NestedNamedField implements NamedField {
     private static long serialVersionUID = -7623005572810688221L;
     private final NamedField parent;
     private final NamedField child;
@@ -2818,6 +2837,14 @@ final class UnifiedOpts {
       return parent.getGrpcName() + "." + child.getGrpcName();
     }
 
+    NamedField getParent() {
+      return parent;
+    }
+
+    NamedField getChild() {
+      return child;
+    }
+
     @Override
     public boolean equals(Object o) {
       if (this == o) {
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Utils.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Utils.java
index c0374d3f..6359ec5d 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Utils.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Utils.java
@@ -26,6 +26,7 @@ import com.google.cloud.storage.Conversions.Codec;
 import com.google.cloud.storage.UnifiedOpts.NamedField;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.MapDifference;
 import com.google.common.collect.Maps;
 import com.google.common.io.BaseEncoding;
@@ -56,6 +57,21 @@ import org.checkerframework.checker.nullness.qual.Nullable;
  */
 @InternalApi
 final class Utils {
+  private static final Function<ImmutableMap.Builder<?, ?>, ImmutableMap<?, ?>> mapBuild;
+
+  static {
+    Function<ImmutableMap.Builder<?, ?>, ImmutableMap<?, ?>> tmp;
+    // buildOrThrow was added in guava 31.0
+    // if it fails, fallback to the older build() method instead.
+    // The behavior was the same, but the new name makes the behavior clear
+    try {
+      ImmutableMap.builder().buildOrThrow();
+      tmp = ImmutableMap.Builder::buildOrThrow;
+    } catch (NoSuchMethodError e) {
+      tmp = ImmutableMap.Builder::build;
+    }
+    mapBuild = tmp;
+  }
 
   static final DateTimeFormatter RFC_3339_DATE_TIME_FORMATTER =
       DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@@ -319,4 +335,8 @@ final class Utils {
       return ImmutableList.of(t);
     }
   }
+
+  static <K, V> ImmutableMap<K, V> mapBuild(ImmutableMap.Builder<K, V> b) {
+    return (ImmutableMap<K, V>) mapBuild.apply(b);
+  }
 }
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java
index 89a09867..5341051a 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java
@@ -1090,6 +1090,10 @@ public class HttpStorageRpc implements StorageRpc {
           requestFactory.buildPostRequest(url, new JsonHttpContent(jsonFactory, object));
       HttpHeaders requestHeaders = httpRequest.getHeaders();
       requestHeaders.set("X-Upload-Content-Type", detectContentType(object, options));
+      Long xUploadContentLength = Option.X_UPLOAD_CONTENT_LENGTH.getLong(options);
+      if (xUploadContentLength != null) {
+        requestHeaders.set("X-Upload-Content-Length", xUploadContentLength);
+      }
       setEncryptionHeaders(requestHeaders, "x-goog-encryption-", options);
       HttpResponse response = httpRequest.execute();
       if (response.getStatusCode() != 200) {
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/StorageRpc.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/StorageRpc.java
index d4e0abbf..78747d42 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/StorageRpc.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/StorageRpc.java
@@ -77,7 +77,8 @@ public interface StorageRpc extends ServiceRpc {
     SOFT_DELETED("softDeleted"),
     COPY_SOURCE_ACL("copySourceAcl"),
     GENERATION("generation"),
-    INCLUDE_FOLDERS_AS_PREFIXES("includeFoldersAsPrefixes");
+    INCLUDE_FOLDERS_AS_PREFIXES("includeFoldersAsPrefixes"),
+    X_UPLOAD_CONTENT_LENGTH("x-upload-content-length");
 
     private final String value;
 
diff --git a/grpc-google-cloud-storage-control-v2/pom.xml b/grpc-google-cloud-storage-control-v2/pom.xml
index cd85deba..8a5fd385 100644
--- a/grpc-google-cloud-storage-control-v2/pom.xml
+++ b/grpc-google-cloud-storage-control-v2/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>grpc-google-cloud-storage-control-v2</artifactId>
-  <version>2.41.0</version><!-- {x-version-update:grpc-google-cloud-storage-control-v2:current} -->
+  <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-control-v2:current} -->
   <name>grpc-google-cloud-storage-control-v2</name>
   <description>GRPC library for google-cloud-storage</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/grpc-google-cloud-storage-v2/pom.xml b/grpc-google-cloud-storage-v2/pom.xml
index 2f788f3b..c6e0891f 100644
--- a/grpc-google-cloud-storage-v2/pom.xml
+++ b/grpc-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>grpc-google-cloud-storage-v2</artifactId>
-  <version>2.41.0-alpha</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
+  <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
   <name>grpc-google-cloud-storage-v2</name>
   <description>GRPC library for grpc-google-cloud-storage-v2</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/pom.xml b/pom.xml
index eb743397..11d575fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage-parent</artifactId>
   <packaging>pom</packaging>
-  <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+  <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   <name>Storage Parent</name>
   <url>https://github.com/googleapis/java-storage</url>
   <description>
@@ -14,7 +14,7 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>sdk-platform-java-config</artifactId>
-    <version>3.33.0</version>
+    <version>3.34.0</version>
   </parent>
 
   <developers>
@@ -66,6 +66,13 @@
         <type>pom</type>
         <scope>import</scope>
       </dependency>
+      <dependency>
+        <groupId>org.junit</groupId>
+        <artifactId>junit-bom</artifactId>
+        <version>5.11.0</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
       <!--
       Each of the following dependencies declares a dependency on opentelemtry-semconv,
       but they differ in what version. Explicitly declare the version here to break the tie.
@@ -127,17 +134,17 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-storage</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.apis</groupId>
         <artifactId>google-api-services-storage</artifactId>
-        <version>v1-rev20240706-2.0.0</version>
+        <version>v1-rev20240819-2.0.0</version>
       </dependency>
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-pubsub</artifactId>
-        <version>1.132.0</version>
+        <version>1.132.1</version>
         <scope>test</scope>
       </dependency>
       <dependency>
@@ -149,32 +156,32 @@
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-storage-v2</artifactId>
-        <version>2.41.0-alpha</version><!-- {x-version-update:proto-google-cloud-storage-v2:current} -->
+        <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-storage-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>grpc-google-cloud-storage-v2</artifactId>
-        <version>2.41.0-alpha</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
+        <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>gapic-google-cloud-storage-v2</artifactId>
-        <version>2.41.0-alpha</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
+        <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>grpc-google-cloud-storage-control-v2</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:grpc-google-cloud-storage-control-v2:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-storage-control-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-storage-control-v2</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:proto-google-cloud-storage-control-v2:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-storage-control-v2:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-storage-control</artifactId>
-        <version>2.41.0</version><!-- {x-version-update:google-cloud-storage-control:current} -->
+        <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage-control:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.cloud</groupId>
diff --git a/proto-google-cloud-storage-control-v2/pom.xml b/proto-google-cloud-storage-control-v2/pom.xml
index b246d36a..f7dc55c0 100644
--- a/proto-google-cloud-storage-control-v2/pom.xml
+++ b/proto-google-cloud-storage-control-v2/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>proto-google-cloud-storage-control-v2</artifactId>
-  <version>2.41.0</version><!-- {x-version-update:proto-google-cloud-storage-control-v2:current} -->
+  <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-storage-control-v2:current} -->
   <name>proto-google-cloud-storage-control-v2</name>
   <description>Proto library for  proto-google-cloud-storage-control-v2</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadata.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadata.java
index c5d0bb3c..165827ac 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadata.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadataOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadataOrBuilder.java
index e203b7da..77fb3d09 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadataOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CommonLongRunningOperationMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface CommonLongRunningOperationMetadataOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequest.java
index e950c655..b0415473 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequestOrBuilder.java
index 88c7f84c..33acbf06 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface CreateFolderRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequest.java
index 74424273..14204d6a 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequestOrBuilder.java
index d59a43a1..d4f977e9 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/CreateManagedFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface CreateManagedFolderRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequest.java
index 18e8ce40..692b2d4a 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequestOrBuilder.java
index 3f7b5b62..87c8eda4 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface DeleteFolderRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequest.java
index a4686007..a47c71ba 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequestOrBuilder.java
index 953ece8b..a94ac799 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/DeleteManagedFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface DeleteManagedFolderRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/Folder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/Folder.java
index 200c19a9..a5ad9da4 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/Folder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/Folder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/FolderOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/FolderOrBuilder.java
index b6a87b4a..792cd81c 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/FolderOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/FolderOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface FolderOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequest.java
index 4ca2825c..06119f03 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequestOrBuilder.java
index 2041920c..3d54da86 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface GetFolderRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequest.java
index 1d79d223..07c2adb0 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequestOrBuilder.java
index 191c0a15..24be5d90 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetManagedFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface GetManagedFolderRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequest.java
index 63c3eae7..dff1c0f4 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequestOrBuilder.java
index 984bd15a..e900d7c2 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/GetStorageLayoutRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface GetStorageLayoutRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequest.java
index 8f3a9524..aef7af3a 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequestOrBuilder.java
index 0e06b432..af2ac85f 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface ListFoldersRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponse.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponse.java
index 31f6c075..09533fd9 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponse.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponseOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponseOrBuilder.java
index fb158a83..9d0bc9b2 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponseOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListFoldersResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface ListFoldersResponseOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequest.java
index 999775be..0f5858c4 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequestOrBuilder.java
index 0041f113..fd4de32f 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface ListManagedFoldersRequestOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponse.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponse.java
index abc6cc7b..3140fc7b 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponse.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponseOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponseOrBuilder.java
index 322c36b6..7fd9e785 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponseOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ListManagedFoldersResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface ListManagedFoldersResponseOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolder.java
index 86435b66..5c832763 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolderOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolderOrBuilder.java
index e5d481ae..f48c7238 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolderOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/ManagedFolderOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface ManagedFolderOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfo.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfo.java
index 059f9615..19f048b7 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfo.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfo.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfoOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfoOrBuilder.java
index 53311774..039b9bf5 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfoOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/PendingRenameInfoOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface PendingRenameInfoOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadata.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadata.java
index f6cddfa6..fe0a6bac 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadata.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadataOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadataOrBuilder.java
index 6af4130a..438e8328 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadataOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface RenameFolderMetadataOrBuilder
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequest.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequest.java
index b6bb50c3..a4c9449e 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequest.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequestOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequestOrBuilder.java
index b7799da9..c1298af2 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequestOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/RenameFolderRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface RenameFolderRequestOrBuilder
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 3c7736c1..627a85af 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
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public final class StorageControlProto {
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayout.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayout.java
index df62a758..cd26b8e8 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayout.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayout.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 /**
diff --git a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayoutOrBuilder.java b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayoutOrBuilder.java
index cc07785d..18b75fbd 100644
--- a/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayoutOrBuilder.java
+++ b/proto-google-cloud-storage-control-v2/src/main/java/com/google/storage/control/v2/StorageLayoutOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/control/v2/storage_control.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.control.v2;
 
 public interface StorageLayoutOrBuilder
diff --git a/proto-google-cloud-storage-v2/pom.xml b/proto-google-cloud-storage-v2/pom.xml
index c5f35483..156f4fee 100644
--- a/proto-google-cloud-storage-v2/pom.xml
+++ b/proto-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>proto-google-cloud-storage-v2</artifactId>
-  <version>2.41.0-alpha</version><!-- {x-version-update:proto-google-cloud-storage-v2:current} -->
+  <version>2.42.1-beta-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-storage-v2:current} -->
   <name>proto-google-cloud-storage-v2</name>
   <description>PROTO library for proto-google-cloud-storage-v2</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequest.java
index 910d25b0..6a4f989b 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequestOrBuilder.java
index 0277e95f..8105ef95 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface BidiWriteObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponse.java
index c101557e..2e323eea 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponseOrBuilder.java
index 528a4428..6f5033ad 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BidiWriteObjectResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface BidiWriteObjectResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java
index 67a5df95..e8769ae4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControl.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControl.java
index b2c6ce1a..32c16695 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControl.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControl.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControlOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControlOrBuilder.java
index 2c258283..a5b4aff8 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControlOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketAccessControlOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface BucketAccessControlOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java
index d404726a..8909460f 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface BucketOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequest.java
index 665a6bd9..ce3cfc27 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequestOrBuilder.java
index 7f147ed6..28ed2bf3 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CancelResumableWriteRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponse.java
index 520b8eaf..d94e3b70 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponseOrBuilder.java
index ba032124..f98d50e2 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CancelResumableWriteResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CancelResumableWriteResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedData.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedData.java
index 824ba388..f7974e0a 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedData.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedData.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedDataOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedDataOrBuilder.java
index d5199d01..011eaca4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedDataOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ChecksummedDataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ChecksummedDataOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParams.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParams.java
index 52a536ab..958634b4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParams.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParams.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParamsOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParamsOrBuilder.java
index 8232fa50..140f3238 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParamsOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CommonObjectRequestParamsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CommonObjectRequestParamsOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java
index c400203b..e3f6833c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequestOrBuilder.java
index 1eaa01f1..789f152a 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ComposeObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRange.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRange.java
index 98a17211..61a8a809 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRange.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRange.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRangeOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRangeOrBuilder.java
index d4cf266f..a2ba8860 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRangeOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ContentRangeOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ContentRangeOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java
index 8c1eed47..442fc7f5 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java
index 32fa4e23..238d8820 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CreateBucketRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequest.java
index 278b0bee..33d29707 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequestOrBuilder.java
index df1e6b81..43399bcb 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CreateHmacKeyRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponse.java
index 4e763b46..7b9ebeb9 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponseOrBuilder.java
index 1b0ca68d..92b425f3 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateHmacKeyResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CreateHmacKeyResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequest.java
index 32583d67..ccd7b5ca 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequestOrBuilder.java
index fb106cbd..4ea85d10 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateNotificationConfigRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CreateNotificationConfigRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java
index 9c12a013..445db627 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java
index dea3c58a..f16f3885 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface CustomerEncryptionOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequest.java
index a41ce6b1..d767a380 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequestOrBuilder.java
index e16f379e..3f8bd830 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteBucketRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface DeleteBucketRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequest.java
index f424f3e6..81d8f402 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequestOrBuilder.java
index 25f792bd..1e460f34 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteHmacKeyRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface DeleteHmacKeyRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequest.java
index 3ed33c9e..7dbce047 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequestOrBuilder.java
index c0b97b8d..82196edc 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteNotificationConfigRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface DeleteNotificationConfigRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequest.java
index 225ab611..b725baba 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequestOrBuilder.java
index 26265c14..4c67db0c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/DeleteObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface DeleteObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequest.java
index e436ba6c..718cfe9c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequestOrBuilder.java
index 0a797f87..277ae45e 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetBucketRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface GetBucketRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequest.java
index 1ac5037e..4309821d 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequestOrBuilder.java
index 810b54f4..24114b8a 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetHmacKeyRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface GetHmacKeyRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequest.java
index ac58e695..10fe480e 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequestOrBuilder.java
index 722654bf..830feed5 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetNotificationConfigRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface GetNotificationConfigRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequest.java
index 383c4f61..8aac3b40 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequestOrBuilder.java
index 3c9d4e4b..43bc85ec 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface GetObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequest.java
index 103bc4a5..905bc123 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequestOrBuilder.java
index 9d883a51..9894144a 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/GetServiceAccountRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface GetServiceAccountRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadata.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadata.java
index 08557a21..6c32b469 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadata.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadataOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadataOrBuilder.java
index 10537fa6..4e6f740f 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadataOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/HmacKeyMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface HmacKeyMetadataOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequest.java
index 3f0459ea..d37ba823 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequestOrBuilder.java
index 57c83288..aeda080c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListBucketsRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponse.java
index 9f3b2e62..d14016cc 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponseOrBuilder.java
index d0978292..e32a69c4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListBucketsResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListBucketsResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequest.java
index 833ed56d..66c69f9c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequestOrBuilder.java
index 170f1693..6e4abbee 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListHmacKeysRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponse.java
index 54344d68..cff02538 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponseOrBuilder.java
index 994e5506..a157bb87 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListHmacKeysResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListHmacKeysResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequest.java
index 199bc95e..c9254d6a 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequestOrBuilder.java
index 1c08d451..51e9442d 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListNotificationConfigsRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponse.java
index 9e0c00e9..cac987e1 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponseOrBuilder.java
index ee7634c0..1d87dda8 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListNotificationConfigsResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListNotificationConfigsResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java
index ddb575f2..e409baf0 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java
index 6abda607..24d35318 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListObjectsRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponse.java
index 392f5c5c..5657cee2 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponseOrBuilder.java
index ef5e82b8..3d0016ae 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ListObjectsResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequest.java
index f866fcaa..a2f35b77 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequestOrBuilder.java
index 8c9b7e67..4df7efc9 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/LockBucketRetentionPolicyRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface LockBucketRetentionPolicyRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfig.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfig.java
index 479b8ffb..152bcdb7 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfig.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfig.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfigOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfigOrBuilder.java
index 56cb9e6c..147fe444 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfigOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationConfigOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface NotificationConfigOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java
index 7e4d6f90..354322e5 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControl.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControl.java
index 6a56338b..35060842 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControl.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControl.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControlOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControlOrBuilder.java
index 11e3909a..dc3a7a50 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControlOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectAccessControlOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ObjectAccessControlOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksums.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksums.java
index 6a515e05..c4986fa5 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksums.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksums.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksumsOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksumsOrBuilder.java
index f58e290a..81d4b2b8 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksumsOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectChecksumsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ObjectChecksumsOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java
index 62f72c13..28b1ef72 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ObjectOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Owner.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Owner.java
index 9a6afaf9..999db9e3 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Owner.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Owner.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/OwnerOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/OwnerOrBuilder.java
index d9a742fd..df9a7900 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/OwnerOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/OwnerOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface OwnerOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeam.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeam.java
index 0f512e2c..269d5089 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeam.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeam.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeamOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeamOrBuilder.java
index 39317d44..f1446cff 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeamOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ProjectTeamOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ProjectTeamOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequest.java
index 55778a11..d542dab0 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequestOrBuilder.java
index 94ad9c82..2d1debf0 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ReadObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponse.java
index e8676907..67e50393 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponseOrBuilder.java
index b57255da..23b10e59 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ReadObjectResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ReadObjectResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequest.java
index c01c3d74..b62a1c5c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequestOrBuilder.java
index b7f8a0f1..f7db7c9b 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RestoreObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface RestoreObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java
index d5aaa957..e1b74a44 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java
index 2ea28511..c3e8c05b 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface RewriteObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponse.java
index 2e6aaf68..647257c0 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponseOrBuilder.java
index 47a97cac..137abadb 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface RewriteResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccount.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccount.java
index 775517f9..e63bfdab 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccount.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccount.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccountOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccountOrBuilder.java
index 835c27b6..9be18a4c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccountOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceAccountOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ServiceAccountOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstants.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstants.java
index ebe87b25..73b1c390 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstants.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstants.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstantsOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstantsOrBuilder.java
index db818ba8..8e77cf79 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstantsOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ServiceConstantsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface ServiceConstantsOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequest.java
index 626db2a0..113973a2 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequestOrBuilder.java
index 1d1a842a..7be1082a 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface StartResumableWriteRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponse.java
index a1fda1a6..4c5e054c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponseOrBuilder.java
index d0ec115d..97363890 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StartResumableWriteResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface StartResumableWriteResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
index caa3bf07..7dc64c34 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public final class StorageProto {
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequest.java
index 85cd112f..55f69a79 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequestOrBuilder.java
index 98179a99..1d77f68f 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateBucketRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface UpdateBucketRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequest.java
index b6f06d1f..4e5633ae 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequestOrBuilder.java
index 8683e681..3c907ac2 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateHmacKeyRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface UpdateHmacKeyRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequest.java
index f1583c57..f0ef0069 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequestOrBuilder.java
index 962d3e38..e20ac81e 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/UpdateObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface UpdateObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequest.java
index aeabc664..dbef8599 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequestOrBuilder.java
index fd2a6639..fd5acbd8 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface WriteObjectRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponse.java
index b01fd737..d3b74825 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponseOrBuilder.java
index 536ca826..7dac3f94 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface WriteObjectResponseOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpec.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpec.java
index 867a6ade..410f41a0 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpec.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpec.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpecOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpecOrBuilder.java
index 6c0bdb6b..ff5e5a7c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpecOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/WriteObjectSpecOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface WriteObjectSpecOrBuilder
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 8c138826..11b84819 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -30,12 +30,12 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage</artifactId>
-      <version>2.41.0</version>
+      <version>2.42.0</version>
     </dependency>
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage-control</artifactId>
-      <version>2.41.0</version>
+      <version>2.42.0</version>
     </dependency>
     <!-- [END storage_install_without_bom] -->
 
@@ -66,7 +66,7 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-pubsub</artifactId>
-      <version>1.132.0</version>
+      <version>1.132.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/samples/pom.xml b/samples/pom.xml
index cb1009a9..9f17328f 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -39,7 +39,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-deploy-plugin</artifactId>
-        <version>3.1.2</version>
+        <version>3.1.3</version>
         <configuration>
           <skip>true</skip>
         </configuration>
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index cff6a7bd..34607e69 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,12 +28,12 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage</artifactId>
-      <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+      <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
     </dependency>
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage-control</artifactId>
-      <version>2.41.0</version><!-- {x-version-update:google-cloud-storage-control:current} -->
+      <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage-control:current} -->
       <scope>compile</scope>
     </dependency>
 
@@ -58,7 +58,7 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-pubsub</artifactId>
-      <version>1.132.0</version>
+      <version>1.132.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 16e60956..9f76a299 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -31,7 +31,7 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>libraries-bom</artifactId>
-        <version>26.43.0</version>
+        <version>26.45.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
@@ -76,7 +76,7 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-pubsub</artifactId>
-      <version>1.132.0</version>
+      <version>1.132.1</version>
       <scope>test</scope>
     </dependency>
   <!-- [START storage_install_with_bom] -->
diff --git a/storage-shared-benchmarking/pom.xml b/storage-shared-benchmarking/pom.xml
index 2dba9896..dfb34562 100644
--- a/storage-shared-benchmarking/pom.xml
+++ b/storage-shared-benchmarking/pom.xml
@@ -10,7 +10,7 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-storage-parent</artifactId>
-    <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+    <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
   </parent>
 
   <properties>
@@ -31,7 +31,7 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage</artifactId>
-      <version>2.41.0</version><!-- {x-version-update:google-cloud-storage:current} -->
+      <version>2.42.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-storage:current} -->
       <classifier>tests</classifier>
     </dependency>
     <dependency>
diff --git a/versions.txt b/versions.txt
index fdc80274..3c5bf135 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,10 +1,10 @@
 # Format:
 # module:released-version:current-version
 
-google-cloud-storage:2.41.0:2.41.0
-gapic-google-cloud-storage-v2:2.41.0-alpha:2.41.0-alpha
-grpc-google-cloud-storage-v2:2.41.0-alpha:2.41.0-alpha
-proto-google-cloud-storage-v2:2.41.0-alpha:2.41.0-alpha
-google-cloud-storage-control:2.41.0:2.41.0
-proto-google-cloud-storage-control-v2:2.41.0:2.41.0
-grpc-google-cloud-storage-control-v2:2.41.0:2.41.0
+google-cloud-storage:2.42.0:2.42.1-SNAPSHOT
+gapic-google-cloud-storage-v2:2.42.0-beta:2.42.1-beta-SNAPSHOT
+grpc-google-cloud-storage-v2:2.42.0-beta:2.42.1-beta-SNAPSHOT
+proto-google-cloud-storage-v2:2.42.0-beta:2.42.1-beta-SNAPSHOT
+google-cloud-storage-control:2.42.0:2.42.1-SNAPSHOT
+proto-google-cloud-storage-control-v2:2.42.0:2.42.1-SNAPSHOT
+grpc-google-cloud-storage-control-v2:2.42.0:2.42.1-SNAPSHOT


Test patch:
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/FakeServer.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/FakeServer.java
index 578f6c7d..331856c4 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/FakeServer.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/FakeServer.java
@@ -60,6 +60,7 @@ final class FakeServer implements AutoCloseable {
             .setProjectId("test-proj")
             .setCredentials(NoCredentials.getInstance())
             .setGrpcInterceptorProvider(GrpcPlainRequestLoggingInterceptor.getInterceptorProvider())
+            .setEnableGrpcClientMetrics(false)
             .build();
     return new FakeServer(server, grpcStorageOptions);
   }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/GapicUploadSessionBuilderSyntaxTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/GapicUploadSessionBuilderSyntaxTest.java
index a8afe473..e35278b5 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/GapicUploadSessionBuilderSyntaxTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/GapicUploadSessionBuilderSyntaxTest.java
@@ -23,6 +23,7 @@ import com.google.api.core.ApiFuture;
 import com.google.api.core.ApiFutures;
 import com.google.api.gax.rpc.ClientStreamingCallable;
 import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.storage.UnifiedOpts.Opts;
 import com.google.storage.v2.StartResumableWriteRequest;
 import com.google.storage.v2.StartResumableWriteResponse;
 import com.google.storage.v2.WriteObjectRequest;
@@ -94,7 +95,7 @@ public final class GapicUploadSessionBuilderSyntaxTest {
   @Test
   public void syntax_resumableUnbuffered_fluent() {
     ApiFuture<ResumableWrite> startAsync =
-        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req);
+        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req, Opts.empty());
     UnbufferedWritableByteChannelSession<WriteObjectResponse> session =
         ResumableMedia.gapic()
             .write()
@@ -110,7 +111,7 @@ public final class GapicUploadSessionBuilderSyntaxTest {
   @Test
   public void syntax_resumableBuffered_fluent() {
     ApiFuture<ResumableWrite> startAsync =
-        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req);
+        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req, Opts.empty());
     BufferedWritableByteChannelSession<WriteObjectResponse> session =
         ResumableMedia.gapic()
             .write()
@@ -150,7 +151,7 @@ public final class GapicUploadSessionBuilderSyntaxTest {
   @Test
   public void syntax_resumableUnbuffered_incremental() {
     ApiFuture<ResumableWrite> startAsync =
-        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req);
+        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req, Opts.empty());
     GapicWritableByteChannelSessionBuilder b1 =
         ResumableMedia.gapic()
             .write()
@@ -164,7 +165,7 @@ public final class GapicUploadSessionBuilderSyntaxTest {
   @Test
   public void syntax_resumableBuffered_incremental() {
     ApiFuture<ResumableWrite> startAsync =
-        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req);
+        ResumableMedia.gapic().write().resumableWrite(startResumableWrite, req, Opts.empty());
     GapicWritableByteChannelSessionBuilder b1 =
         ResumableMedia.gapic()
             .write()
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITStorageLifecycleTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITStorageLifecycleTest.java
index 0c8fc12b..1c404ec9 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITStorageLifecycleTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITStorageLifecycleTest.java
@@ -50,6 +50,7 @@ public final class ITStorageLifecycleTest {
             .setHost(testBench.getGRPCBaseUri())
             .setCredentials(NoCredentials.getInstance())
             .setProjectId("test-project-id")
+            .setEnableGrpcClientMetrics(false)
             .build();
 
     Storage service1 = options.getService();
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITSyncAndUploadUnbufferedWritableByteChannelPropertyTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITSyncAndUploadUnbufferedWritableByteChannelPropertyTest.java
index 240ae1d5..5055c1e2 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITSyncAndUploadUnbufferedWritableByteChannelPropertyTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITSyncAndUploadUnbufferedWritableByteChannelPropertyTest.java
@@ -310,7 +310,9 @@ public class ITSyncAndUploadUnbufferedWritableByteChannelPropertyTest {
 
       ApiFuture<ResumableWrite> f =
           storage.startResumableWrite(
-              GrpcCallContext.createDefault(), storage.getWriteObjectRequest(info, Opts.empty()));
+              GrpcCallContext.createDefault(),
+              storage.getWriteObjectRequest(info, Opts.empty()),
+              Opts.empty());
       ResumableWrite resumableWrite = ApiExceptions.callAndTranslateApiException(f);
 
       UploadCtx uploadCtx =
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITUnbufferedResumableUploadTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITUnbufferedResumableUploadTest.java
index 34b600d7..8dce2090 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITUnbufferedResumableUploadTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITUnbufferedResumableUploadTest.java
@@ -161,7 +161,9 @@ public final class ITUnbufferedResumableUploadTest {
         ResumableMedia.gapic()
             .write()
             .resumableWrite(
-                storageClient.startResumableWriteCallable().withDefaultCallContext(merge), request);
+                storageClient.startResumableWriteCallable().withDefaultCallContext(merge),
+                request,
+                opts);
 
     UnbufferedWritableByteChannelSession<WriteObjectResponse> session =
         ResumableMedia.gapic()
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RetryTestFixture.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RetryTestFixture.java
index eec2b847..3076b171 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RetryTestFixture.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RetryTestFixture.java
@@ -157,7 +157,10 @@ final class RetryTestFixture extends TestWatcher {
           builder = StorageOptions.http().setHost(testBench.getBaseUri());
           break;
         case GRPC:
-          builder = StorageOptions.grpc().setHost(testBench.getGRPCBaseUri());
+          builder =
+              StorageOptions.grpc()
+                  .setHost(testBench.getGRPCBaseUri())
+                  .setEnableGrpcClientMetrics(false);
           break;
         default:
           throw new IllegalStateException(
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcIdempotencyTokenTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcIdempotencyTokenTest.java
index ec5d5425..0aca897a 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcIdempotencyTokenTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcIdempotencyTokenTest.java
@@ -68,6 +68,7 @@ public final class ITGrpcIdempotencyTokenTest {
     storage =
         StorageOptions.grpc()
             .setGrpcInterceptorProvider(() -> ImmutableList.of(requestAuditing))
+            .setEnableGrpcClientMetrics(false)
             .build()
             .getService();
   }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITJsonPatchTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITJsonPatchTest.java
new file mode 100644
index 00000000..bb2bdfe6
--- /dev/null
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITJsonPatchTest.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2024 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.google.cloud.storage.it;
+
+import static com.google.cloud.storage.TestUtils.assertAll;
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.BucketInfo.LifecycleRule;
+import com.google.cloud.storage.BucketInfo.LifecycleRule.LifecycleAction;
+import com.google.cloud.storage.BucketInfo.LifecycleRule.LifecycleCondition;
+import com.google.cloud.storage.Cors;
+import com.google.cloud.storage.Cors.Origin;
+import com.google.cloud.storage.HttpMethod;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.Storage.BlobTargetOption;
+import com.google.cloud.storage.Storage.BucketTargetOption;
+import com.google.cloud.storage.TransportCompatibility.Transport;
+import com.google.cloud.storage.it.runner.StorageITRunner;
+import com.google.cloud.storage.it.runner.annotations.Backend;
+import com.google.cloud.storage.it.runner.annotations.CrossRun;
+import com.google.cloud.storage.it.runner.annotations.Inject;
+import com.google.cloud.storage.it.runner.registry.Generator;
+import com.google.common.collect.ImmutableList;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(StorageITRunner.class)
+@CrossRun(
+    backends = {Backend.PROD},
+    transports = {Transport.HTTP, Transport.GRPC})
+public final class ITJsonPatchTest {
+
+  @Inject public Storage storage;
+  @Inject public BucketInfo bucket;
+  @Inject public Generator generator;
+
+  @Test
+  public void object() throws Exception {
+    String cacheControl = "max-age=60";
+    String contentDisposition = "attachment";
+    String contentEncoding = "identity";
+    String contentLanguage = "en-US";
+    String contentType = "text/plain";
+    BlobInfo info =
+        BlobInfo.newBuilder(bucket, generator.randomObjectName())
+            .setCacheControl(cacheControl)
+            .setContentDisposition(contentDisposition)
+            .setContentEncoding(contentEncoding)
+            .setContentLanguage(contentLanguage)
+            .setContentType(contentType)
+            .build();
+
+    Blob gen1 = storage.create(info);
+    assertAll(
+        () -> assertThat(gen1.getCacheControl()).isEqualTo(cacheControl),
+        () -> assertThat(gen1.getContentDisposition()).isEqualTo(contentDisposition),
+        () -> assertThat(gen1.getContentEncoding()).isEqualTo(contentEncoding),
+        () -> assertThat(gen1.getContentLanguage()).isEqualTo(contentLanguage),
+        () -> assertThat(gen1.getContentType()).isEqualTo(contentType));
+    BlobInfo update =
+        gen1.toBuilder()
+            .setCacheControl(null)
+            .setContentDisposition(null)
+            .setContentEncoding(null)
+            .setContentLanguage(null)
+            .setContentType(null)
+            .build();
+    Blob gen2 =
+        storage.update(update, BlobTargetOption.metagenerationMatch(gen1.getMetageneration()));
+    assertAll(
+        () -> assertThat(gen2.getCacheControl()).isAnyOf("", null),
+        () -> assertThat(gen2.getContentDisposition()).isAnyOf("", null),
+        () -> assertThat(gen2.getContentEncoding()).isAnyOf("", null),
+        () -> assertThat(gen2.getContentLanguage()).isAnyOf("", null),
+        () -> assertThat(gen2.getContentType()).isAnyOf("", null));
+  }
+
+  @Test
+  public void bucket() throws Exception {
+    ImmutableList<LifecycleRule> lifecycleRules =
+        ImmutableList.of(
+            new LifecycleRule(
+                LifecycleAction.newDeleteAction(),
+                LifecycleCondition.newBuilder()
+                    .setMatchesPrefix(ImmutableList.of("blahblahblah"))
+                    .build()));
+    ImmutableList<Cors> cors =
+        ImmutableList.of(
+            Cors.newBuilder()
+                .setMaxAgeSeconds(300)
+                .setMethods(ImmutableList.of(HttpMethod.GET))
+                .setOrigins(ImmutableList.of(Origin.any()))
+                .setResponseHeaders(ImmutableList.of("blah2blah"))
+                .build());
+    String indexPage = "index.html";
+    String notFoundPage = "404.html";
+    BucketInfo info =
+        BucketInfo.newBuilder(generator.randomBucketName())
+            .setLifecycleRules(lifecycleRules)
+            .setCors(cors)
+            .setIndexPage(indexPage)
+            .setNotFoundPage(notFoundPage)
+            .build();
+
+    try (TemporaryBucket tmpBucket =
+        TemporaryBucket.newBuilder().setBucketInfo(info).setStorage(storage).build()) {
+      BucketInfo gen1 = tmpBucket.getBucket();
+
+      assertAll(
+          () -> assertThat(gen1.getLifecycleRules()).isEqualTo(lifecycleRules),
+          () -> assertThat(gen1.getCors()).isEqualTo(cors),
+          () -> assertThat(gen1.getIndexPage()).isEqualTo(indexPage),
+          () -> assertThat(gen1.getNotFoundPage()).isEqualTo(notFoundPage));
+      BucketInfo update =
+          gen1.toBuilder()
+              .setLifecycleRules(ImmutableList.of())
+              .setCors(ImmutableList.of())
+              .setIndexPage(null)
+              .setNotFoundPage(null)
+              .build();
+      Bucket gen2 = storage.update(update, BucketTargetOption.metagenerationMatch());
+      assertAll(
+          () -> assertThat(gen2.getLifecycleRules()).isAnyOf(ImmutableList.of(), null),
+          () -> assertThat(gen2.getCors()).isAnyOf(ImmutableList.of(), null),
+          () -> assertThat(gen2.getIndexPage()).isAnyOf("", null),
+          () -> assertThat(gen2.getNotFoundPage()).isAnyOf("", null));
+    }
+  }
+}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITResumableUploadTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITResumableUploadTest.java
new file mode 100644
index 00000000..cb0524f7
--- /dev/null
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITResumableUploadTest.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2024 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.google.cloud.storage.it;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertThrows;
+
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.BlobWriteSession;
+import com.google.cloud.storage.BlobWriteSessionConfigs;
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.DataGenerator;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.Storage.BlobWriteOption;
+import com.google.cloud.storage.StorageException;
+import com.google.cloud.storage.StorageOptions;
+import com.google.cloud.storage.TmpFile;
+import com.google.cloud.storage.TransportCompatibility.Transport;
+import com.google.cloud.storage.it.runner.StorageITRunner;
+import com.google.cloud.storage.it.runner.annotations.Backend;
+import com.google.cloud.storage.it.runner.annotations.CrossRun;
+import com.google.cloud.storage.it.runner.annotations.Inject;
+import com.google.cloud.storage.it.runner.registry.Generator;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.WritableByteChannel;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+
+@RunWith(StorageITRunner.class)
+@CrossRun(
+    backends = {Backend.PROD},
+    transports = {Transport.HTTP, Transport.GRPC})
+public final class ITResumableUploadTest {
+  @Rule public final TemporaryFolder temp = new TemporaryFolder();
+
+  @Inject public Storage storage;
+  @Inject public BucketInfo bucket;
+  @Inject public Generator generator;
+
+  @Test
+  public void expectedUploadSize_chunked_doesMatch()
+      throws IOException, ExecutionException, InterruptedException, TimeoutException {
+    doTestDoesMatch(storage);
+  }
+
+  @Test
+  public void expectedUploadSize_chunked_doesNotMatch() throws IOException {
+    doTestDoesNotMatch(storage);
+  }
+
+  @Test
+  @CrossRun.Exclude(transports = Transport.HTTP)
+  public void expectedUploadSize_bidi_doesMatch() throws Exception {
+    StorageOptions options =
+        storage
+            .getOptions()
+            .toBuilder()
+            .setBlobWriteSessionConfig(BlobWriteSessionConfigs.bidiWrite())
+            .build();
+    try (Storage storage = options.getService()) {
+      doTestDoesMatch(storage);
+    }
+  }
+
+  @Test
+  @CrossRun.Exclude(transports = Transport.HTTP)
+  public void expectedUploadSize_bidi_doesNotMatch() throws Exception {
+    StorageOptions options =
+        storage
+            .getOptions()
+            .toBuilder()
+            .setBlobWriteSessionConfig(BlobWriteSessionConfigs.bidiWrite())
+            .build();
+    try (Storage storage = options.getService()) {
+      doTestDoesNotMatch(storage);
+    }
+  }
+
+  @Test
+  public void expectedUploadSize_ignored_pcu() throws Exception {
+    StorageOptions options =
+        storage
+            .getOptions()
+            .toBuilder()
+            .setBlobWriteSessionConfig(BlobWriteSessionConfigs.parallelCompositeUpload())
+            .build();
+    try (Storage storage = options.getService()) {
+      int objectContentSize = 10;
+      byte[] bytes = DataGenerator.base64Characters().genBytes(objectContentSize);
+      BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+      BlobWriteSession session =
+          storage.blobWriteSession(info, BlobWriteOption.expectedObjectSize(objectContentSize + 1));
+      try (WritableByteChannel open = session.open()) {
+        open.write(ByteBuffer.wrap(bytes));
+      }
+
+      BlobInfo gen1 = session.getResult().get(5, TimeUnit.SECONDS);
+      assertThat(gen1.getSize()).isEqualTo(objectContentSize);
+    }
+  }
+
+  @Test
+  public void expectedUploadSize_createFrom_inputStream_doesMatch() throws Exception {
+    StorageOptions options =
+        storage
+            .getOptions()
+            .toBuilder()
+            .setBlobWriteSessionConfig(BlobWriteSessionConfigs.parallelCompositeUpload())
+            .build();
+    try (Storage storage = options.getService()) {
+      int objectContentSize = 10;
+      byte[] bytes = DataGenerator.base64Characters().genBytes(objectContentSize);
+      BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+      BlobInfo gen1 =
+          storage.createFrom(
+              info,
+              new ByteArrayInputStream(bytes),
+              BlobWriteOption.expectedObjectSize(objectContentSize));
+      assertThat(gen1.getSize()).isEqualTo(objectContentSize);
+    }
+  }
+
+  @Test
+  public void expectedUploadSize_createFrom_inputStream_doesNotMatch() throws Exception {
+    StorageOptions options =
+        storage
+            .getOptions()
+            .toBuilder()
+            .setBlobWriteSessionConfig(BlobWriteSessionConfigs.parallelCompositeUpload())
+            .build();
+    try (Storage storage = options.getService()) {
+      int objectContentSize = 10;
+      byte[] bytes = DataGenerator.base64Characters().genBytes(objectContentSize);
+      BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+      StorageException se =
+          assertThrows(
+              StorageException.class,
+              () ->
+                  storage.createFrom(
+                      info,
+                      new ByteArrayInputStream(bytes),
+                      BlobWriteOption.expectedObjectSize(objectContentSize + 1)));
+
+      assertThat(se.getCode()).isEqualTo(400);
+    }
+  }
+
+  @Test
+  public void expectedUploadSize_createFrom_path_doesMatch() throws IOException {
+    int objectContentSize = 10;
+    BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+    try (TmpFile tmpFile =
+        DataGenerator.base64Characters().tempFile(temp.getRoot().toPath(), objectContentSize)) {
+      BlobInfo gen1 =
+          storage.createFrom(
+              info, tmpFile.getPath(), BlobWriteOption.expectedObjectSize(objectContentSize));
+      assertThat(gen1.getSize()).isEqualTo(objectContentSize);
+    }
+  }
+
+  @Test
+  public void expectedUploadSize_createFrom_path_doesNotMatch() throws IOException {
+    int objectContentSize = 10;
+    BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+    try (TmpFile tmpFile =
+        DataGenerator.base64Characters().tempFile(temp.getRoot().toPath(), objectContentSize)) {
+      StorageException se =
+          assertThrows(
+              StorageException.class,
+              () ->
+                  storage.createFrom(
+                      info,
+                      tmpFile.getPath(),
+                      BlobWriteOption.expectedObjectSize(objectContentSize + 1)));
+
+      assertThat(se.getCode()).isEqualTo(400);
+    }
+  }
+
+  private void doTestDoesMatch(Storage storage)
+      throws IOException, InterruptedException, ExecutionException, TimeoutException {
+    int objectContentSize = 10;
+    byte[] bytes = DataGenerator.base64Characters().genBytes(objectContentSize);
+    BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+    BlobWriteSession session =
+        storage.blobWriteSession(info, BlobWriteOption.expectedObjectSize(objectContentSize));
+    try (WritableByteChannel open = session.open()) {
+      open.write(ByteBuffer.wrap(bytes));
+    }
+
+    BlobInfo gen1 = session.getResult().get(5, TimeUnit.SECONDS);
+    assertThat(gen1.getSize()).isEqualTo(objectContentSize);
+  }
+
+  private void doTestDoesNotMatch(Storage storage) throws IOException {
+    int objectContentSize = 10;
+    byte[] bytes = DataGenerator.base64Characters().genBytes(objectContentSize);
+    BlobInfo info = BlobInfo.newBuilder(bucket, generator.randomObjectName()).build();
+    BlobWriteSession session =
+        storage.blobWriteSession(info, BlobWriteOption.expectedObjectSize(objectContentSize + 1));
+
+    WritableByteChannel open = session.open();
+    open.write(ByteBuffer.wrap(bytes));
+    StorageException se = assertThrows(StorageException.class, open::close);
+
+    assertThat(se.getCode()).isEqualTo(400);
+  }
+}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageOptionsTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageOptionsTest.java
index 85ee5f64..86bf0a4b 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageOptionsTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageOptionsTest.java
@@ -64,7 +64,11 @@ public final class ITStorageOptionsTest {
   @Test
   public void clientShouldConstructCleanly_grpc() throws Exception {
     StorageOptions options =
-        StorageOptions.grpc().setCredentials(credentials).setAttemptDirectPath(false).build();
+        StorageOptions.grpc()
+            .setCredentials(credentials)
+            .setAttemptDirectPath(false)
+            .setEnableGrpcClientMetrics(false)
+            .build();
     doTest(options);
   }
 
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java
index 4ed6887f..9739abcc 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java
@@ -117,6 +117,7 @@ final class BackendResources implements ManagedLifecycle {
                   optionsBuilder
                       .setGrpcInterceptorProvider(
                           GrpcPlainRequestLoggingInterceptor.getInterceptorProvider())
+                      .setEnableGrpcClientMetrics(false)
                       .build();
               return new StorageInstance(built, protectedBucketNames);
             });
diff --git a/google-cloud-storage/src/test/resources/com/google/cloud/storage/it/runner/registry/Dockerfile b/google-cloud-storage/src/test/resources/com/google/cloud/storage/it/runner/registry/Dockerfile
index a18e9da0..3bc94b31 100644
--- a/google-cloud-storage/src/test/resources/com/google/cloud/storage/it/runner/registry/Dockerfile
+++ b/google-cloud-storage/src/test/resources/com/google/cloud/storage/it/runner/registry/Dockerfile
@@ -1,1 +1,1 @@
-FROM gcr.io/cloud-devrel-public-resources/storage-testbench:v0.44.0
+FROM gcr.io/cloud-devrel-public-resources/storage-testbench:v0.45.0
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequest.java
index bed16901..4c0d27d5 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequestOrBuilder.java
index 055478ae..61bada67 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface QueryWriteStatusRequestOrBuilder
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponse.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponse.java
index b71c9d45..93f49bf9 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponse.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 /**
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponseOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponseOrBuilder.java
index f3a139e5..65af4df5 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponseOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/QueryWriteStatusResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/storage/v2/storage.proto
 
-// Protobuf Java Version: 3.25.3
+// Protobuf Java Version: 3.25.4
 package com.google.storage.v2;
 
 public interface QueryWriteStatusResponseOrBuilder