diff --git a/.gemini/config.yaml b/.gemini/config.yaml
new file mode 100644
index 0000000000..8afb848534
--- /dev/null
+++ b/.gemini/config.yaml
@@ -0,0 +1,10 @@
+# https://developers.google.com/gemini-code-assist/docs/customize-gemini-behavior-github#custom-configuration
+have_fun: false
+code_review:
+ disable: false
+ comment_severity_threshold: HIGH
+ max_review_comments: -1
+ pull_request_opened:
+ help: false
+ summary: false
+ code_review: false
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 46f7ababf4..b0834efa0f 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -4,11 +4,11 @@
# For syntax help see:
# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax
-# The @googleapis/cloud-storage-dpe is the default owner for changes in this repo
-* @googleapis/yoshi-java @googleapis/cloud-storage-dpe
+# The @googleapis/gcs-sdk-team is the default owner for changes in this repo
+* @googleapis/yoshi-java @googleapis/gcs-sdk-team
# for handwritten libraries, keep codeowner_team in .repo-metadata.json as owner
-**/*.java @googleapis/cloud-storage-dpe
+**/*.java @googleapis/gcs-sdk-team
# The java-samples-reviewers team is the default owner for samples changes
diff --git a/.github/release-please.yml b/.github/release-please.yml
index 7341462432..bbe99166de 100644
--- a/.github/release-please.yml
+++ b/.github/release-please.yml
@@ -59,3 +59,10 @@ branches:
- README.md
- .readme-partials.yaml
branch: 2.47.x
+ - bumpMinorPreMajor: true
+ handleGHRelease: true
+ releaseType: java-backport
+ extraFiles:
+ - README.md
+ - .readme-partials.yaml
+ branch: 2.49.x
diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml
index b41763405f..d953e4f76b 100644
--- a/.github/sync-repo-settings.yaml
+++ b/.github/sync-repo-settings.yaml
@@ -180,6 +180,23 @@ branchProtectionRules:
- 'Kokoro - Test: Java 17 GraalVM Native Image'
- javadoc
- unmanaged_dependency_check
+ - pattern: 2.49.x
+ isAdminEnforced: true
+ requiredApprovingReviewCount: 1
+ requiresCodeOwnerReviews: true
+ requiresStrictStatusChecks: false
+ requiredStatusCheckContexts:
+ - dependencies (17)
+ - lint
+ - clirr
+ - units (8)
+ - units (11)
+ - 'Kokoro - Test: Integration'
+ - cla/google
+ - 'Kokoro - Test: Java GraalVM Native Image'
+ - 'Kokoro - Test: Java 17 GraalVM Native Image'
+ - javadoc
+ - unmanaged_dependency_check
permissionRules:
- team: yoshi-admins
permission: admin
diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml
index 9d33c38186..9c972c8cb5 100644
--- a/.github/workflows/hermetic_library_generation.yaml
+++ b/.github/workflows/hermetic_library_generation.yaml
@@ -43,7 +43,7 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }}
- - uses: googleapis/sdk-platform-java/.github/scripts@v2.54.0
+ - uses: googleapis/sdk-platform-java/.github/scripts@v2.55.1
if: env.SHOULD_RUN == 'true'
with:
base_ref: ${{ github.base_ref }}
diff --git a/.github/workflows/renovate_config_check.yaml b/.github/workflows/renovate_config_check.yaml
index 7c5ec7865e..292ebcf214 100644
--- a/.github/workflows/renovate_config_check.yaml
+++ b/.github/workflows/renovate_config_check.yaml
@@ -16,7 +16,7 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
- node-version: '20'
+ node-version: '22'
- name: Install Renovate and Config Validator
run: |
diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
index 9f3349cfc6..1002c7112e 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.44.0
+ uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.45.1
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 6631426cdd..6bcb91e8e3 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.44.0"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.45.1"
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg
index 366a07b5d5..f05038e16c 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.44.0"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.45.1"
}
env_vars: {
diff --git a/.repo-metadata.json b/.repo-metadata.json
index 18fe4b0c5a..1807b79a7d 100644
--- a/.repo-metadata.json
+++ b/.repo-metadata.json
@@ -13,7 +13,7 @@
"api_id": "storage.googleapis.com",
"library_type": "GAPIC_COMBO",
"requires_billing": true,
- "codeowner_team": "@googleapis/cloud-storage-dpe",
+ "codeowner_team": "@googleapis/gcs-sdk-team",
"excluded_poms": "google-cloud-storage-bom,google-cloud-storage",
"issue_tracker": "https://issuetracker.google.com/savedsearches/559782",
"extra_versioned_modules": "gapic-google-cloud-storage-v2",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c828b0890f..20fb2004a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,28 @@
# Changelog
+## [2.50.0](https://github.com/googleapis/java-storage/compare/v2.49.0...v2.50.0) (2025-03-14)
+
+
+### Features
+
+* Next release from main branch is 2.50.0 ([#2968](https://github.com/googleapis/java-storage/issues/2968)) ([4a69fcc](https://github.com/googleapis/java-storage/commit/4a69fcc16787904675e5ba15f42bcab67553a7aa))
+
+
+### Bug Fixes
+
+* **deps:** Update the Java code generator (gapic-generator-java) to 2.54.0 ([22e7e3d](https://github.com/googleapis/java-storage/commit/22e7e3d4e8c56184f9c91b1e0bf52d5c4aa4cf9f))
+* **deps:** Update the Java code generator (gapic-generator-java) to 2.55.1 ([81c8c61](https://github.com/googleapis/java-storage/commit/81c8c611ab51a706d63670dff86db5bfd04ef544))
+* Improve 503 handling for json resumable uploads ([#2987](https://github.com/googleapis/java-storage/issues/2987)) ([9bc2b14](https://github.com/googleapis/java-storage/commit/9bc2b14a0058cded0321e5afa3ea3fc59bf3421b))
+* Update usages of String.format to explicitly pass Locale.US ([#2974](https://github.com/googleapis/java-storage/issues/2974)) ([8bcb2de](https://github.com/googleapis/java-storage/commit/8bcb2de22ea39cfc0b4dda07daba78ea192b5e98)), closes [#2972](https://github.com/googleapis/java-storage/issues/2972)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250224-2.0.0 ([#2969](https://github.com/googleapis/java-storage/issues/2969)) ([80a40c4](https://github.com/googleapis/java-storage/commit/80a40c41527a5fb83a41ac4754d5be22f5cd5c2b))
+* Update googleapis/sdk-platform-java action to v2.55.1 ([#2985](https://github.com/googleapis/java-storage/issues/2985)) ([e22a2de](https://github.com/googleapis/java-storage/commit/e22a2de0fe1dc66e6e5b6d311f4812c290177203))
+* Update sdk-platform-java dependencies ([#2983](https://github.com/googleapis/java-storage/issues/2983)) ([9eeb82a](https://github.com/googleapis/java-storage/commit/9eeb82af81ad8095c21542808a8eaa5098dee074))
+* Update sdk-platform-java dependencies ([#2986](https://github.com/googleapis/java-storage/issues/2986)) ([10b922a](https://github.com/googleapis/java-storage/commit/10b922a8ae831fcd0107abf54091566442ae5fde))
+
## [2.49.0](https://github.com/googleapis/java-storage/compare/v2.48.2...v2.49.0) (2025-02-26)
diff --git a/README.md b/README.md
index 344d8502eb..cf899ba9e0 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:
com.google.cloud
libraries-bom
- 26.55.0
+ 26.56.0
pom
import
@@ -46,12 +46,12 @@ If you are using Maven without the BOM, add this to your dependencies:
com.google.cloud
google-cloud-storage
- 2.48.2
+ 2.49.0
com.google.cloud
google-cloud-storage-control
- 2.48.2
+ 2.49.0
```
@@ -59,20 +59,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:26.55.0')
+implementation platform('com.google.cloud:libraries-bom:26.56.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.49.0'
+implementation 'com.google.cloud:google-cloud-storage:2.50.0'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "2.49.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "2.50.0"
```
## Authentication
@@ -515,7 +515,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.49.0
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-storage/2.50.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 4845e6efab..3f3bee92ff 100644
--- a/gapic-google-cloud-storage-v2/pom.xml
+++ b/gapic-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
gapic-google-cloud-storage-v2
- 2.49.0
+ 2.50.0
gapic-google-cloud-storage-v2
GRPC library for gapic-google-cloud-storage-v2
com.google.cloud
google-cloud-storage-parent
- 2.49.0
+ 2.50.0
diff --git a/generation_config.yaml b/generation_config.yaml
index 1a74239123..6e9ca8db90 100644
--- a/generation_config.yaml
+++ b/generation_config.yaml
@@ -1,6 +1,6 @@
-gapic_generator_version: 2.53.0
-googleapis_commitish: 6bc8e91bf92cc985da5ed0c227b48f12315cb695
-libraries_bom_version: 26.55.0
+gapic_generator_version: 2.55.1
+googleapis_commitish: d0ba3ce0fafe1225ebda6b259a2e29dfe2934bb5
+libraries_bom_version: 26.56.0
libraries:
- api_shortname: storage
name_pretty: Cloud Storage
@@ -13,7 +13,7 @@ libraries:
repo: googleapis/java-storage
repo_short: java-storage
distribution_name: com.google.cloud:google-cloud-storage
- codeowner_team: '@googleapis/cloud-storage-dpe'
+ codeowner_team: '@googleapis/gcs-sdk-team'
api_id: storage.googleapis.com
requires_billing: true
library_type: GAPIC_COMBO
diff --git a/google-cloud-storage-bom/pom.xml b/google-cloud-storage-bom/pom.xml
index b0c64685e0..28a6b98f32 100644
--- a/google-cloud-storage-bom/pom.xml
+++ b/google-cloud-storage-bom/pom.xml
@@ -19,12 +19,12 @@
4.0.0
com.google.cloud
google-cloud-storage-bom
- 2.49.0
+ 2.50.0
pom
com.google.cloud
sdk-platform-java-config
- 3.44.0
+ 3.45.1
@@ -69,37 +69,37 @@
com.google.cloud
google-cloud-storage
- 2.49.0
+ 2.50.0
com.google.api.grpc
gapic-google-cloud-storage-v2
- 2.49.0
+ 2.50.0
com.google.api.grpc
grpc-google-cloud-storage-v2
- 2.49.0
+ 2.50.0
com.google.api.grpc
proto-google-cloud-storage-v2
- 2.49.0
+ 2.50.0
com.google.cloud
google-cloud-storage-control
- 2.49.0
+ 2.50.0
com.google.api.grpc
grpc-google-cloud-storage-control-v2
- 2.49.0
+ 2.50.0
com.google.api.grpc
proto-google-cloud-storage-control-v2
- 2.49.0
+ 2.50.0
diff --git a/google-cloud-storage-control/pom.xml b/google-cloud-storage-control/pom.xml
index 8dfd37f5a2..a05f4fd398 100644
--- a/google-cloud-storage-control/pom.xml
+++ b/google-cloud-storage-control/pom.xml
@@ -5,13 +5,13 @@
4.0.0
com.google.cloud
google-cloud-storage-control
- 2.49.0
+ 2.50.0
google-cloud-storage-control
GRPC library for google-cloud-storage-control
com.google.cloud
google-cloud-storage-parent
- 2.49.0
+ 2.50.0
diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml
index 9d0251da3e..88c168d957 100644
--- a/google-cloud-storage/pom.xml
+++ b/google-cloud-storage/pom.xml
@@ -2,7 +2,7 @@
4.0.0
google-cloud-storage
- 2.49.0
+ 2.50.0
jar
Google Cloud Storage
https://github.com/googleapis/java-storage
@@ -12,11 +12,11 @@
com.google.cloud
google-cloud-storage-parent
- 2.49.0
+ 2.50.0
google-cloud-storage
- 1.119.0
+ 1.119.1
@@ -239,14 +239,14 @@
com.google.api.grpc
proto-google-cloud-kms-v1
- 0.152.0
+ 0.153.0
test
com.google.cloud
google-cloud-kms
- 2.61.0
+ 2.62.0
test
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryUnbufferedReadableByteChannel.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryUnbufferedReadableByteChannel.java
index 86afe7a98c..60e4fbcdc4 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryUnbufferedReadableByteChannel.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ApiaryUnbufferedReadableByteChannel.java
@@ -52,6 +52,7 @@
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.ScatteringByteChannel;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Function;
@@ -318,7 +319,10 @@ private static String getHeaderValue(@NonNull HttpHeaders headers, @NonNull Stri
} else {
throw new IllegalStateException(
String.format(
- "Unexpected header type '%s' for header %s", o.getClass().getName(), headerName));
+ Locale.US,
+ "Unexpected header type '%s' for header %s",
+ o.getClass().getName(),
+ headerName));
}
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java
index 52ce09fd7e..c5379005a0 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java
@@ -40,6 +40,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -1441,7 +1442,7 @@ public String getMd5ToHexString() {
byte[] decodedMd5 = BaseEncoding.base64().decode(md5);
StringBuilder stringBuilder = new StringBuilder();
for (byte b : decodedMd5) {
- stringBuilder.append(String.format("%02x", b & 0xff));
+ stringBuilder.append(String.format(Locale.US, "%02x", b & 0xff));
}
return stringBuilder.toString();
}
@@ -1473,7 +1474,7 @@ public String getCrc32cToHexString() {
byte[] decodeCrc32c = BaseEncoding.base64().decode(crc32c);
StringBuilder stringBuilder = new StringBuilder();
for (byte b : decodeCrc32c) {
- stringBuilder.append(String.format("%02x", b & 0xff));
+ stringBuilder.append(String.format(Locale.US, "%02x", b & 0xff));
}
return stringBuilder.toString();
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ByteRangeSpec.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ByteRangeSpec.java
index 524bfe3c2e..a166c5ea2f 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ByteRangeSpec.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ByteRangeSpec.java
@@ -24,6 +24,7 @@
import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.storage.v2.ReadObjectRequest;
import java.io.Serializable;
+import java.util.Locale;
import java.util.Objects;
import java.util.function.BiFunction;
import javax.annotation.concurrent.Immutable;
@@ -239,12 +240,12 @@ public ReadObjectRequest.Builder seekReadObjectRequest(ReadObjectRequest.Builder
@Override
protected String fmtAsHttpRangeHeader() throws ArithmeticException {
- return String.format("bytes=%d-%d", beginOffset, endOffsetInclusive());
+ return String.format(Locale.US, "bytes=%d-%d", beginOffset, endOffsetInclusive());
}
@Override
protected ToStringHelper append(ToStringHelper tsh) {
- return tsh.addValue(String.format("%d + %d", beginOffset, length));
+ return tsh.addValue(String.format(Locale.US, "%d + %d", beginOffset, length));
}
}
@@ -324,12 +325,12 @@ public ReadObjectRequest.Builder seekReadObjectRequest(ReadObjectRequest.Builder
@Override
protected String fmtAsHttpRangeHeader() throws ArithmeticException {
- return String.format("bytes=%d-%d", beginOffset, endOffsetInclusive());
+ return String.format(Locale.US, "bytes=%d-%d", beginOffset, endOffsetInclusive());
}
@Override
protected ToStringHelper append(ToStringHelper tsh) {
- return tsh.addValue(String.format("[%d, %d)", beginOffset, endOffsetExclusive));
+ return tsh.addValue(String.format(Locale.US, "[%d, %d)", beginOffset, endOffsetExclusive));
}
}
@@ -409,12 +410,12 @@ public ReadObjectRequest.Builder seekReadObjectRequest(ReadObjectRequest.Builder
@Override
protected String fmtAsHttpRangeHeader() throws ArithmeticException {
- return String.format("bytes=%d-%d", beginOffset, endOffsetInclusive);
+ return String.format(Locale.US, "bytes=%d-%d", beginOffset, endOffsetInclusive);
}
@Override
protected ToStringHelper append(ToStringHelper tsh) {
- return tsh.addValue(String.format("[%d, %d]", beginOffset, endOffsetInclusive));
+ return tsh.addValue(String.format(Locale.US, "[%d, %d]", beginOffset, endOffsetInclusive));
}
}
@@ -488,9 +489,9 @@ public ReadObjectRequest.Builder seekReadObjectRequest(ReadObjectRequest.Builder
@Override
protected String fmtAsHttpRangeHeader() throws ArithmeticException {
if (beginOffset > 0) {
- return String.format("bytes=%d-", beginOffset);
+ return String.format(Locale.US, "bytes=%d-", beginOffset);
} else if (beginOffset < 0) {
- return String.format("bytes=%d", beginOffset);
+ return String.format(Locale.US, "bytes=%d", beginOffset);
} else {
return null;
}
@@ -498,7 +499,7 @@ protected String fmtAsHttpRangeHeader() throws ArithmeticException {
@Override
protected ToStringHelper append(ToStringHelper tsh) {
- return tsh.addValue(String.format("[%d, +INF)", beginOffset));
+ return tsh.addValue(String.format(Locale.US, "[%d, +INF)", beginOffset));
}
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Crc32cValue.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Crc32cValue.java
index e66f04eabe..8e1bea02bd 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Crc32cValue.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Crc32cValue.java
@@ -16,6 +16,7 @@
package com.google.cloud.storage;
+import java.util.Locale;
import java.util.Objects;
abstract class Crc32cValue> {
@@ -64,7 +65,7 @@ static Crc32cLengthKnown of(int value, long length) {
}
static String fmtCrc32cValue(int value1) {
- return String.format("crc32c{0x%08x}", value1);
+ return String.format(Locale.US, "crc32c{0x%08x}", value1);
}
static final class Crc32cLengthUnknown extends Crc32cValue {
@@ -142,7 +143,7 @@ public Crc32cLengthKnown concat(Crc32cLengthKnown other) {
@Override
public String toString() {
- return String.format("crc32c{0x%08x (length = %d)}", value, length);
+ return String.format(Locale.US, "crc32c{0x%08x (length = %d)}", value, length);
}
@Override
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/CrossTransportUtils.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/CrossTransportUtils.java
index 1c5aa1d97d..6adea4d5ce 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/CrossTransportUtils.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/CrossTransportUtils.java
@@ -18,6 +18,7 @@
import com.google.cloud.storage.TransportCompatibility.Transport;
import java.util.Arrays;
+import java.util.Locale;
import java.util.stream.Collectors;
final class CrossTransportUtils {
@@ -49,12 +50,20 @@ static T throwTransportOnly(Class> clazz, String methodName, Transport tra
break;
default:
throw new IllegalStateException(
- String.format("Broken Java Enum: %s received value: '%s'", Transport.class, transport));
+ String.format(
+ Locale.US,
+ "Broken Java Enum: %s received value: '%s'",
+ Transport.class,
+ transport));
}
String message =
String.format(
+ Locale.US,
"%s#%s is only supported for %s transport. Please use %s to construct a compatible instance.",
- clazz.getName(), methodName, transport, builder);
+ clazz.getName(),
+ methodName,
+ transport,
+ builder);
throw new UnsupportedOperationException(message);
}
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 4db4827ef4..4ad5aa0700 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
@@ -42,6 +42,7 @@
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.ScatteringByteChannel;
+import java.util.Locale;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
@@ -166,8 +167,10 @@ public long read(ByteBuffer[] dsts, int offset, int length) throws IOException {
} else if (metadata.getGeneration() != respMetadata.getGeneration()) {
throw closeWithError(
String.format(
+ Locale.US,
"Mismatch Generation between subsequent reads. Expected %d but received %d",
- metadata.getGeneration(), respMetadata.getGeneration()));
+ metadata.getGeneration(),
+ respMetadata.getGeneration()));
}
}
ChecksummedData checksummedData = resp.getChecksummedData();
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 43e575a29d..1ddd72f34d 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
@@ -96,6 +96,7 @@
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
@@ -210,10 +211,10 @@ private Tuple> resolveSettingsAndOpts() throw
// unless for Direct Google Access try and strip here if we can
switch (scheme) {
case "http":
- endpoint = String.format("%s:%s", uri.getHost(), port > 0 ? port : 80);
+ endpoint = String.format(Locale.US, "%s:%s", uri.getHost(), port > 0 ? port : 80);
break;
case "https":
- endpoint = String.format("%s:%s", uri.getHost(), port > 0 ? port : 443);
+ endpoint = String.format(Locale.US, "%s:%s", uri.getHost(), port > 0 ? port : 443);
break;
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcUtils.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcUtils.java
index 7e81011558..5fd7c5a274 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcUtils.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcUtils.java
@@ -19,6 +19,7 @@
import com.google.api.gax.grpc.GrpcCallContext;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import java.util.Locale;
final class GrpcUtils {
@@ -28,7 +29,8 @@ static GrpcCallContext contextWithBucketName(String bucketName, GrpcCallContext
if (bucketName != null && !bucketName.isEmpty()) {
return baseContext.withExtraHeaders(
ImmutableMap.of(
- "x-goog-request-params", ImmutableList.of(String.format("bucket=%s", bucketName))));
+ "x-goog-request-params",
+ ImmutableList.of(String.format(Locale.US, "bucket=%s", bucketName))));
}
return baseContext;
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Hasher.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Hasher.java
index d7741b7d91..a255550bb9 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Hasher.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Hasher.java
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.List;
+import java.util.Locale;
import java.util.function.Supplier;
import javax.annotation.concurrent.Immutable;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -98,8 +99,10 @@ public void validate(Crc32cValue> expected, List b) throws IOExcep
if (!actual.eqValue(expected)) {
throw new IOException(
String.format(
+ Locale.US,
"Mismatch checksum value. Expected %s actual %s",
- expected.debugString(), actual.debugString()));
+ expected.debugString(),
+ actual.debugString()));
}
}
@@ -109,8 +112,10 @@ public void validate(Crc32cValue> expected, Supplier b) throws IOE
if (!actual.eqValue(expected)) {
throw new IOException(
String.format(
+ Locale.US,
"Mismatch checksum value. Expected %s actual %s",
- expected.debugString(), actual.debugString()));
+ expected.debugString(),
+ actual.debugString()));
}
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/HttpContentRange.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/HttpContentRange.java
index 49fc5a1949..a069c24950 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/HttpContentRange.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/HttpContentRange.java
@@ -19,6 +19,7 @@
import static com.google.common.base.Preconditions.checkArgument;
import com.google.common.base.MoreObjects;
+import java.util.Locale;
import java.util.Objects;
import java.util.function.UnaryOperator;
@@ -91,7 +92,8 @@ private Incomplete(ByteRangeSpec spec) {
@Override
public String getHeaderValue() {
- return String.format("bytes %d-%d/*", spec.beginOffset(), spec.endOffsetInclusive());
+ return String.format(
+ Locale.US, "bytes %d-%d/*", spec.beginOffset(), spec.endOffsetInclusive());
}
@Override
@@ -145,7 +147,8 @@ private Total(ByteRangeSpec spec, long size) {
@Override
public String getHeaderValue() {
- return String.format("bytes %d-%d/%d", spec.beginOffset(), spec.endOffsetInclusive(), size);
+ return String.format(
+ Locale.US, "bytes %d-%d/%d", spec.beginOffset(), spec.endOffsetInclusive(), size);
}
@Override
@@ -202,7 +205,7 @@ private Size(long size) {
@Override
public String getHeaderValue() {
- return String.format("bytes */%d", size);
+ return String.format(Locale.US, "bytes */%d", size);
}
@Override
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSession.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSession.java
index e29094fd09..f21d4ce676 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSession.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSession.java
@@ -23,13 +23,14 @@
import com.google.cloud.storage.spi.v1.HttpRpcContext;
import com.google.cloud.storage.spi.v1.HttpStorageRpc;
import io.opencensus.trace.EndSpanOptions;
+import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import org.checkerframework.checker.nullness.qual.Nullable;
final class JsonResumableSession {
static final String SPAN_NAME_WRITE =
- String.format("Sent.%s.write", HttpStorageRpc.class.getName());
+ String.format(Locale.US, "Sent.%s.write", HttpStorageRpc.class.getName());
static final EndSpanOptions END_SPAN_OPTIONS =
EndSpanOptions.builder().setSampleToLocalSpanStore(true).build();
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionQueryTask.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionQueryTask.java
index dba12171ab..40b96dbe8f 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionQueryTask.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/JsonResumableSessionQueryTask.java
@@ -113,6 +113,7 @@ final class JsonResumableSessionQueryTask
} else {
HttpResponseException cause = new HttpResponseException(response);
String contentType = response.getHeaders().getContentType();
+ Long contentLength = response.getHeaders().getContentLength();
// If the content-range header value has run ahead of the backend, it will respond with
// a 503 with plain text content
// Attempt to detect this very loosely as to minimize impact of modified error message
@@ -120,7 +121,9 @@ final class JsonResumableSessionQueryTask
if ((!ResumableSessionFailureScenario.isOk(code)
&& !ResumableSessionFailureScenario.isContinue(code))
&& contentType != null
- && contentType.startsWith("text/plain")) {
+ && contentType.startsWith("text/plain")
+ && contentLength != null
+ && contentLength > 0) {
String errorMessage = cause.getContent().toLowerCase(Locale.US);
if (errorMessage.contains("content-range")) {
throw ResumableSessionFailureScenario.SCENARIO_5.toStorageException(
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/MetadataField.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/MetadataField.java
index fb76af6e9e..4070736c88 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/MetadataField.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/MetadataField.java
@@ -21,6 +21,7 @@
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
import java.util.Comparator;
+import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import org.checkerframework.checker.nullness.qual.NonNull;
@@ -102,7 +103,7 @@ public long getEnd() {
}
String encode() {
- return String.format("%04d-%04d", begin, end);
+ return String.format(Locale.US, "%04d-%04d", begin, end);
}
static PartRange decode(String s) {
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/OtelStorageDecorator.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/OtelStorageDecorator.java
index dc92c3420f..b1b7f65011 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/OtelStorageDecorator.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/OtelStorageDecorator.java
@@ -278,7 +278,7 @@ public Blob get(String bucket, String blob, BlobGetOption... options) {
Span span =
tracer
.spanBuilder("get")
- .setAttribute("gsutil.uri", String.format("gs://%s/%s", bucket, blob))
+ .setAttribute("gsutil.uri", String.format(Locale.US, "gs://%s/%s", bucket, blob))
.startSpan();
try (Scope ignore = span.makeCurrent()) {
return delegate.get(bucket, blob, options);
@@ -1477,7 +1477,7 @@ static Storage decorate(Storage delegate, OpenTelemetry otel, Transport transpor
}
private static @NonNull String fmtBucket(String bucket) {
- return String.format("gs://%s/", bucket);
+ return String.format(Locale.US, "gs://%s/", bucket);
}
private static final class TracerDecorator implements Tracer {
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 b824acf4d5..4b0a06e3d0 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
@@ -63,6 +63,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
@@ -245,8 +246,10 @@ public void close() throws IOException {
buildParallelCompositeUploadException(
ApiExceptionFactory.createException(
String.format(
+ Locale.US,
"CRC32C Checksum mismatch. expected: [%s] but was: [%s]",
- expectedCrc32c, crc32c),
+ expectedCrc32c,
+ crc32c),
null,
GrpcStatusCode.of(Code.DATA_LOSS),
false),
@@ -477,6 +480,7 @@ private ApiFuture asyncCleanupAfterFailure(Throwable originalFailure) {
String message =
String.format(
+ Locale.US,
"Incomplete parallel composite upload cleanup after previous error. Unknown object ids: %s",
failedGsUris);
StorageException storageException = new StorageException(0, message, null);
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/PostPolicyV4.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/PostPolicyV4.java
index 2cd2311477..fd59632659 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/PostPolicyV4.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/PostPolicyV4.java
@@ -24,6 +24,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
+import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -416,7 +417,7 @@ public String toJson() {
for (int i = 0; i < jsonArray.length; i++) {
char c = jsonArray[i];
if (c >= 128) { // is a unicode character
- escapedJson.append(String.format("\\u%04x", (int) c));
+ escapedJson.append(String.format(Locale.US, "\\u%04x", (int) c));
} else {
switch (c) {
case '\\':
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ReadCursor.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ReadCursor.java
index b65a6e257b..1af690af26 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ReadCursor.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ReadCursor.java
@@ -17,6 +17,8 @@
import static com.google.common.base.Preconditions.checkArgument;
+import java.util.Locale;
+
/**
* Shrink wraps a beginning, offset and limit for tracking state of an individual invocation of
* {@link #read}
@@ -47,6 +49,7 @@ public long read() {
@Override
public String toString() {
- return String.format("ReadCursor{begin=%d, offset=%d, limit=%d}", beginning, offset, limit);
+ return String.format(
+ Locale.US, "ReadCursor{begin=%d, offset=%d, limit=%d}", beginning, offset, limit);
}
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableSessionFailureScenario.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableSessionFailureScenario.java
index 390b90dcfd..b82dc6eebe 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableSessionFailureScenario.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableSessionFailureScenario.java
@@ -35,6 +35,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -145,7 +146,10 @@ static StorageException toStorageException(
ResumableSessionFailureScenario.toStorageException(
cause.getStatusCode(),
String.format(
- "%d %s", cause.getStatusCode(), statusMessage == null ? "" : statusMessage),
+ Locale.US,
+ "%d %s",
+ cause.getStatusCode(),
+ statusMessage == null ? "" : statusMessage),
"",
uploadId,
response,
@@ -368,8 +372,10 @@ private static void fmtWriteObjectRequest(
sb.append("\n").append(prefix).append(t2);
sb.append(
String.format(
+ Locale.US,
"checksummed_data: {range: [%d:%d]",
- writeOffset, writeOffset + checksummedData.getContent().size()));
+ writeOffset,
+ writeOffset + checksummedData.getContent().size()));
if (checksummedData.hasCrc32C()) {
sb.append(", crc32c: ").append(checksummedData.getCrc32C());
}
@@ -402,8 +408,10 @@ private static void fmtBidiWriteObjectRequest(
sb.append("\n").append(prefix).append(t2);
sb.append(
String.format(
+ Locale.US,
"checksummed_data: {range: [%d:%d]",
- writeOffset, writeOffset + checksummedData.getContent().size()));
+ writeOffset,
+ writeOffset + checksummedData.getContent().size()));
if (checksummedData.hasCrc32C()) {
sb.append(", crc32c: ").append(checksummedData.getCrc32C());
}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/RewindableContent.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/RewindableContent.java
index ef215573fb..c765d61a87 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/RewindableContent.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/RewindableContent.java
@@ -31,6 +31,7 @@
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
+import java.util.Locale;
abstract class RewindableContent extends AbstractHttpContent {
@@ -65,8 +66,11 @@ public static RewindableContent of(ByteBuffer[] srcs, int srcsOffset, int srcsLe
if (!(0 <= srcsOffset && srcsOffset <= srcs.length)) {
throw new ArrayIndexOutOfBoundsException(
String.format(
+ Locale.US,
"srcsOffset out of bounds (0 <= %d && %d <= %d)",
- srcsOffset, srcsOffset, srcs.length));
+ srcsOffset,
+ srcsOffset,
+ srcs.length));
}
Preconditions.checkArgument(srcsLength >= 0, "srcsLength >= 0 (%d >= 0)", srcsLength);
int end = srcsOffset + srcsLength;
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageOptions.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageOptions.java
index f149db1107..e0dabea4b8 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageOptions.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageOptions.java
@@ -32,6 +32,7 @@
import io.opentelemetry.api.OpenTelemetry;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Locale;
import java.util.Properties;
import org.checkerframework.checker.nullness.qual.NonNull;
@@ -46,7 +47,10 @@ public abstract class StorageOptions extends ServiceOptions
String.format(
+ Locale.US,
"{%s} (%01.03f MiB/s) %s",
prefix,
((r.numBytes * MiB)
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 286654deaa..3111fa246b 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
@@ -322,7 +322,7 @@ public void submit() {
// Here we only add a annotation to at least know how much time each batch takes.
span.addAnnotation("Execute batch request");
batch.setBatchUrl(
- new GenericUrl(String.format("%s/batch/storage/v1", options.getHost())));
+ new GenericUrl(String.format(Locale.US, "%s/batch/storage/v1", options.getHost())));
batch.execute();
}
} catch (IOException ex) {
@@ -901,7 +901,7 @@ public long read(
}
if (position > 0) {
- req.getRequestHeaders().setRange(String.format("bytes=%d-", position));
+ req.getRequestHeaders().setRange(String.format(Locale.US, "bytes=%d-", position));
}
MediaHttpDownloader mediaHttpDownloader = req.getMediaHttpDownloader();
mediaHttpDownloader.setDirectDownloadEnabled(true);
@@ -1021,7 +1021,7 @@ public StorageObject queryCompletedResumableUpload(String uploadId, long totalBy
try {
GenericUrl url = new GenericUrl(uploadId);
HttpRequest req = storage.getRequestFactory().buildPutRequest(url, new EmptyContent());
- req.getHeaders().setContentRange(String.format("bytes */%s", totalBytes));
+ req.getHeaders().setContentRange(String.format(Locale.US, "bytes */%s", totalBytes));
req.setParser(storage.getObjectParser());
HttpResponse response = req.execute();
// If the response is 200
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpcSpans.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpcSpans.java
index dc4b05336c..8fa049d019 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpcSpans.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpcSpans.java
@@ -17,6 +17,7 @@
package com.google.cloud.storage.spi.v1;
import io.opencensus.trace.EndSpanOptions;
+import java.util.Locale;
/** Helper class for instrumenting {@link HttpStorageRpc} with Open Census APIs. */
class HttpStorageRpcSpans {
@@ -102,7 +103,11 @@ class HttpStorageRpcSpans {
static String getTraceSpanName(String methodDescriptor) {
return String.format(
- "%s.%s.%s", SPAN_NAME_CLIENT_PREFIX, HttpStorageRpc.class.getName(), methodDescriptor);
+ Locale.US,
+ "%s.%s.%s",
+ SPAN_NAME_CLIENT_PREFIX,
+ HttpStorageRpc.class.getName(),
+ methodDescriptor);
}
private HttpStorageRpcSpans() {}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/transfermanager/BucketNameMismatchException.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/transfermanager/BucketNameMismatchException.java
index 0391722989..dd8063b9d6 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/transfermanager/BucketNameMismatchException.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/transfermanager/BucketNameMismatchException.java
@@ -16,12 +16,16 @@
package com.google.cloud.storage.transfermanager;
+import java.util.Locale;
+
public final class BucketNameMismatchException extends RuntimeException {
public BucketNameMismatchException(String actual, String expected) {
super(
String.format(
+ Locale.US,
"Bucket name in produced BlobInfo did not match bucket name from config. (%s != %s)",
- actual, expected));
+ actual,
+ expected));
}
}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ByteRangeSpecTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ByteRangeSpecTest.java
index abb5a9536b..66e1bc9688 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ByteRangeSpecTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ByteRangeSpecTest.java
@@ -31,6 +31,7 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
+import java.util.Locale;
import java.util.stream.Stream;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -644,11 +645,11 @@ public static Iterable