diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml
index acb2753149..ea4c275a23 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.57.0
+ - uses: googleapis/sdk-platform-java/.github/scripts@v2.58.0
if: env.SHOULD_RUN == 'true'
with:
base_ref: ${{ github.base_ref }}
diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
index 0184514971..17daf44d4c 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.47.0
+ uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.48.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 64a30e85fb..31ad4e8812 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.47.0"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.48.0"
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-a.cfg b/.kokoro/presubmit/graalvm-native-a.cfg
index d0c2952133..d72ed3f0e3 100644
--- a/.kokoro/presubmit/graalvm-native-a.cfg
+++ b/.kokoro/presubmit/graalvm-native-a.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.46.2" # {x-version-update:google-cloud-shared-dependencies:current}
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.48.0" # {x-version-update:google-cloud-shared-dependencies:current}
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-b.cfg b/.kokoro/presubmit/graalvm-native-b.cfg
index 962c305ff7..f2e296b847 100644
--- a/.kokoro/presubmit/graalvm-native-b.cfg
+++ b/.kokoro/presubmit/graalvm-native-b.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.46.2" # {x-version-update:google-cloud-shared-dependencies:current}
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.48.0" # {x-version-update:google-cloud-shared-dependencies:current}
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-c.cfg b/.kokoro/presubmit/graalvm-native-c.cfg
index 87b5dff65a..68512fbff5 100644
--- a/.kokoro/presubmit/graalvm-native-c.cfg
+++ b/.kokoro/presubmit/graalvm-native-c.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_c:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current}
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.48.0" # {x-version-update:google-cloud-shared-dependencies:current}
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg
index 27bca566d5..72d1a92f99 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.47.0"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.48.0"
}
env_vars: {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6bc64a895a..c156efc1da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
# Changelog
+## [2.52.3](https://github.com/googleapis/java-storage/compare/v2.52.2...v2.52.3) (2025-05-19)
+
+
+### Bug Fixes
+
+* Update grpc client side metrics detection to be graceful when not running on gcp ([#3097](https://github.com/googleapis/java-storage/issues/3097)) ([10cd32d](https://github.com/googleapis/java-storage/commit/10cd32d51aa061304b5b4d0d632a2eed694cd1d6))
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250509-2.0.0 ([#3103](https://github.com/googleapis/java-storage/issues/3103)) ([1fd1090](https://github.com/googleapis/java-storage/commit/1fd109094814bfb6270e10a3e4fd5ec4d20e7fba))
+* Update sdk-platform-java dependencies ([#3102](https://github.com/googleapis/java-storage/issues/3102)) ([3b53b94](https://github.com/googleapis/java-storage/commit/3b53b942f31805c5291ca109b4f3e501fbc6fc0d))
+
## [2.52.2](https://github.com/googleapis/java-storage/compare/v2.52.1...v2.52.2) (2025-05-06)
diff --git a/gapic-google-cloud-storage-v2/pom.xml b/gapic-google-cloud-storage-v2/pom.xml
index 53150f4394..8b03e777fc 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.52.2
+ 2.52.3
gapic-google-cloud-storage-v2
GRPC library for gapic-google-cloud-storage-v2
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
diff --git a/google-cloud-storage-bom/pom.xml b/google-cloud-storage-bom/pom.xml
index d92011e4d7..90849cc68a 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.52.2
+ 2.52.3
pom
com.google.cloud
sdk-platform-java-config
- 3.47.0
+ 3.48.0
@@ -69,37 +69,37 @@
com.google.cloud
google-cloud-storage
- 2.52.2
+ 2.52.3
com.google.api.grpc
gapic-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
grpc-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
proto-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
com.google.cloud
google-cloud-storage-control
- 2.52.2
+ 2.52.3
com.google.api.grpc
grpc-google-cloud-storage-control-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
proto-google-cloud-storage-control-v2
- 2.52.2
+ 2.52.3
diff --git a/google-cloud-storage-control/pom.xml b/google-cloud-storage-control/pom.xml
index 0870f4628d..c900ffebdf 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.52.2
+ 2.52.3
google-cloud-storage-control
GRPC library for google-cloud-storage-control
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml
index ea68c60a09..072333f422 100644
--- a/google-cloud-storage/pom.xml
+++ b/google-cloud-storage/pom.xml
@@ -2,7 +2,7 @@
4.0.0
google-cloud-storage
- 2.52.2
+ 2.52.3
jar
Google Cloud Storage
https://github.com/googleapis/java-storage
@@ -12,11 +12,11 @@
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
google-cloud-storage
- 1.121.2
+ 1.121.3
@@ -239,14 +239,14 @@
com.google.api.grpc
proto-google-cloud-kms-v1
- 0.155.0
+ 0.156.0
test
com.google.cloud
google-cloud-kms
- 2.64.0
+ 2.65.0
test
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 7d116e1688..0fe1737ddc 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
@@ -60,6 +60,7 @@
import com.google.cloud.spi.ServiceRpcFactory;
import com.google.cloud.storage.GrpcUtils.ZeroCopyBidiStreamingCallable;
import com.google.cloud.storage.Hasher.UncheckedChecksumMismatchException;
+import com.google.cloud.storage.OpenTelemetryBootstrappingUtils.ChannelConfigurator;
import com.google.cloud.storage.RetryContext.RetryContextProvider;
import com.google.cloud.storage.Retrying.DefaultRetrier;
import com.google.cloud.storage.Storage.BlobWriteOption;
@@ -332,12 +333,14 @@ private Tuple> resolveSettingsAndOpts() throw
}
if (enableGrpcClientMetrics) {
- OpenTelemetryBootstrappingUtils.enableGrpcMetrics(
- channelProviderBuilder,
- endpoint,
- this.getProjectId(),
- this.getUniverseDomain(),
- !grpcClientMetricsManuallyEnabled);
+ ChannelConfigurator channelConfigurator =
+ OpenTelemetryBootstrappingUtils.enableGrpcMetrics(
+ ChannelConfigurator.lift(channelProviderBuilder.getChannelConfigurator()),
+ endpoint,
+ this.getProjectId(),
+ this.getUniverseDomain(),
+ !grpcClientMetricsManuallyEnabled);
+ channelProviderBuilder.setChannelConfigurator(channelConfigurator);
}
builder.setTransportChannelProvider(channelProviderBuilder.build());
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtils.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtils.java
index fd24ad0b12..b3eb4e90f2 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtils.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtils.java
@@ -17,7 +17,6 @@
package com.google.cloud.storage;
import com.google.api.core.ApiFunction;
-import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
import com.google.api.gax.rpc.PermissionDeniedException;
import com.google.api.gax.rpc.UnavailableException;
import com.google.cloud.opentelemetry.metric.GoogleCloudMetricExporter;
@@ -59,6 +58,8 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
import java.util.stream.Collectors;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
final class OpenTelemetryBootstrappingUtils {
private static final Collection METRICS_TO_ENABLE =
@@ -88,15 +89,41 @@ final class OpenTelemetryBootstrappingUtils {
static final Logger log = Logger.getLogger(OpenTelemetryBootstrappingUtils.class.getName());
- static void enableGrpcMetrics(
- InstantiatingGrpcChannelProvider.Builder channelProviderBuilder,
+ @NonNull
+ static ChannelConfigurator enableGrpcMetrics(
+ @Nullable ChannelConfigurator channelConfigurator,
String endpoint,
- String projectId,
+ @Nullable String projectId,
String universeDomain,
boolean shouldSuppressExceptions) {
+ GCPResourceProvider resourceProvider = new GCPResourceProvider();
+ Attributes detectedAttributes = resourceProvider.getAttributes();
+
+ @Nullable String detectedProjectId =
+ detectedAttributes.get(AttributeKey.stringKey("cloud.account.id"));
+ if (projectId == null && detectedProjectId == null) {
+ log.warning(
+ "Unable to determine the Project ID in order to report metrics. No gRPC client metrics will be reported.");
+ return channelConfigurator != null ? channelConfigurator : ChannelConfigurator.identity();
+ }
+
+ String projectIdToUse = detectedProjectId == null ? projectId : detectedProjectId;
+ if (!projectIdToUse.equals(projectId)) {
+ log.warning(
+ "The Project ID configured for gRPC client metrics is "
+ + projectIdToUse
+ + ", but the Project ID of the storage client is "
+ + projectId
+ + ". Make sure that the service account in use has the required metric writing role "
+ + "(roles/monitoring.metricWriter) in the project "
+ + projectIdToUse
+ + ", or metrics will not be written.");
+ }
+
String metricServiceEndpoint = getCloudMonitoringEndpoint(endpoint, universeDomain);
SdkMeterProvider provider =
- createMeterProvider(metricServiceEndpoint, projectId, shouldSuppressExceptions);
+ createMeterProvider(
+ metricServiceEndpoint, projectIdToUse, detectedAttributes, shouldSuppressExceptions);
OpenTelemetrySdk openTelemetrySdk =
OpenTelemetrySdk.builder().setMeterProvider(provider).build();
@@ -106,16 +133,48 @@ static void enableGrpcMetrics(
.addOptionalLabel("grpc.lb.locality")
.enableMetrics(METRICS_TO_ENABLE)
.build();
- ApiFunction channelConfigurator =
- channelProviderBuilder.getChannelConfigurator();
- channelProviderBuilder.setChannelConfigurator(
+ ChannelConfigurator otelConfigurator =
b -> {
grpcOpenTelemetry.configureChannelBuilder(b);
- if (channelConfigurator != null) {
- return channelConfigurator.apply(b);
- }
return b;
- });
+ };
+ return otelConfigurator.andThen(channelConfigurator);
+ }
+
+ @SuppressWarnings("rawtypes") // ManagedChannelBuilder
+ @FunctionalInterface
+ interface ChannelConfigurator extends ApiFunction {
+ @NonNull
+ default ChannelConfigurator andThen(@Nullable ChannelConfigurator then) {
+ if (then == null) {
+ return this;
+ }
+ return b -> then.apply(this.apply(b));
+ }
+
+ static ChannelConfigurator identity() {
+ return IdentityChannelConfigurator.INSTANCE;
+ }
+
+ static ChannelConfigurator lift(
+ @Nullable ApiFunction f) {
+ if (f == null) {
+ return identity();
+ }
+ return f::apply;
+ }
+ }
+
+ @SuppressWarnings("rawtypes") // ManagedChannelBuilder
+ private static final class IdentityChannelConfigurator implements ChannelConfigurator {
+ private static final IdentityChannelConfigurator INSTANCE = new IdentityChannelConfigurator();
+
+ private IdentityChannelConfigurator() {}
+
+ @Override
+ public ManagedChannelBuilder apply(ManagedChannelBuilder input) {
+ return input;
+ }
}
@VisibleForTesting
@@ -147,24 +206,10 @@ static String getCloudMonitoringEndpoint(String endpoint, String universeDomain)
@VisibleForTesting
static SdkMeterProvider createMeterProvider(
- String metricServiceEndpoint, String projectId, boolean shouldSuppressExceptions) {
- GCPResourceProvider resourceProvider = new GCPResourceProvider();
- Attributes detectedAttributes = resourceProvider.getAttributes();
-
- String detectedProjectId = detectedAttributes.get(AttributeKey.stringKey("cloud.account.id"));
- String projectIdToUse = detectedProjectId == null ? projectId : detectedProjectId;
-
- if (!projectIdToUse.equals(projectId)) {
- log.warning(
- "The Project ID configured for metrics is "
- + projectIdToUse
- + ", but the Project ID of the storage client is "
- + projectId
- + ". Make sure that the service account in use has the required metric writing role "
- + "(roles/monitoring.metricWriter) in the project "
- + projectIdToUse
- + ", or metrics will not be written.");
- }
+ String metricServiceEndpoint,
+ String projectIdToUse,
+ Attributes detectedAttributes,
+ boolean shouldSuppressExceptions) {
MonitoredResourceDescription monitoredResourceDescription =
new MonitoredResourceDescription(
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGrpcMetricsTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGrpcMetricsTest.java
index 4c82054ff6..e71b9077dc 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGrpcMetricsTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGrpcMetricsTest.java
@@ -21,6 +21,8 @@
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.SingleBackend;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.contrib.gcp.resource.GCPResourceProvider;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -36,9 +38,14 @@ public void testGrpcMetrics() {
"storage.googleapis.com:443", "storage.googleapis.com"))
.isEqualTo("monitoring.googleapis.com:443");
+ GCPResourceProvider resourceProvider = new GCPResourceProvider();
+ Attributes detectedAttributes = resourceProvider.getAttributes();
SdkMeterProvider provider =
OpenTelemetryBootstrappingUtils.createMeterProvider(
- "monitoring.googleapis.com:443", grpcStorageOptions.getProjectId(), false);
+ "monitoring.googleapis.com:443",
+ grpcStorageOptions.getProjectId(),
+ detectedAttributes,
+ false);
/*
* SDKMeterProvider doesn't expose the relevant fields we want to test, but they are present in
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtilsTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtilsTest.java
new file mode 100644
index 0000000000..5e93c95a98
--- /dev/null
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/OpenTelemetryBootstrappingUtilsTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeFalse;
+import static org.mockito.Mockito.mock;
+
+import com.google.cloud.storage.OpenTelemetryBootstrappingUtils.ChannelConfigurator;
+import io.grpc.ManagedChannelBuilder;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.junit.Test;
+
+public final class OpenTelemetryBootstrappingUtilsTest {
+
+ @Test
+ public void noErrorIfNotRunningOnGcp() {
+ assumeFalse("Skipping because running on GCP", TestUtils.isOnComputeEngine());
+
+ ChannelConfigurator cc = ChannelConfigurator.identity();
+
+ String endpoint = "storage.googleapis.com:443";
+ String projectId = null;
+ String universeDomain = null;
+ ChannelConfigurator actual =
+ OpenTelemetryBootstrappingUtils.enableGrpcMetrics(
+ cc, endpoint, projectId, universeDomain, true);
+
+ assertThat(actual).isSameInstanceAs(cc);
+ }
+
+ @SuppressWarnings("rawtypes") // ManagedChannelBuilder
+ @Test
+ public void channelConfigurator_andThen() {
+ ManagedChannelBuilder b1 = mock(ManagedChannelBuilder.class, "b1");
+ ManagedChannelBuilder b2 = mock(ManagedChannelBuilder.class, "b2");
+ ManagedChannelBuilder b3 = mock(ManagedChannelBuilder.class, "b2");
+
+ ChannelConfigurator cc1 =
+ b -> {
+ assertThat(b).isSameInstanceAs(b1);
+ return b2;
+ };
+ ChannelConfigurator cc2 =
+ b -> {
+ assertThat(b).isSameInstanceAs(b2);
+ return b3;
+ };
+
+ ChannelConfigurator cc3 = cc1.andThen(cc2);
+
+ ManagedChannelBuilder apply = cc3.apply(b1);
+ assertThat(apply).isSameInstanceAs(b3);
+ }
+
+ @Test
+ public void channelConfigurator_lift_nullToIdentity() {
+ ChannelConfigurator actual = ChannelConfigurator.lift(null);
+ assertThat(actual).isSameInstanceAs(ChannelConfigurator.identity());
+ }
+
+ @SuppressWarnings("rawtypes") // ManagedChannelBuilder
+ @Test
+ public void channelConfigurator_lift_plumbingWorks() {
+ ManagedChannelBuilder b1 = mock(ManagedChannelBuilder.class, "b1");
+ AtomicBoolean called = new AtomicBoolean(false);
+ ChannelConfigurator lifted =
+ ChannelConfigurator.lift(
+ b -> {
+ called.compareAndSet(false, true);
+ return b;
+ });
+ ManagedChannelBuilder actual = lifted.apply(b1);
+ assertThat(actual).isSameInstanceAs(b1);
+ assertThat(called.get()).isTrue();
+ }
+
+ @Test
+ public void channelConfigurator_andThen_nullsafe() {
+ ChannelConfigurator actual = ChannelConfigurator.identity().andThen(null);
+ assertThat(actual).isSameInstanceAs(ChannelConfigurator.identity());
+ }
+}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java
index e6ecb75a26..96fbd57ed9 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java
@@ -54,7 +54,8 @@ public void start() {
createdBucket = s.create(bucketInfo).asBucketInfo();
} catch (StorageException se) {
String msg = se.getMessage();
- if (se.getCode() == 400 && msg.contains("not a valid zone in location")) {
+ if (se.getCode() == 400 && (msg.contains("not a valid zone in location"))
+ || msg.contains("custom placement config")) {
assumeTrue(
"Skipping test due to bucket setup unavailable in current zone. (" + msg + ")", false);
}
diff --git a/grpc-google-cloud-storage-control-v2/pom.xml b/grpc-google-cloud-storage-control-v2/pom.xml
index 391ab159b8..0f9902988d 100644
--- a/grpc-google-cloud-storage-control-v2/pom.xml
+++ b/grpc-google-cloud-storage-control-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-storage-control-v2
- 2.52.2
+ 2.52.3
grpc-google-cloud-storage-control-v2
GRPC library for google-cloud-storage
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
diff --git a/grpc-google-cloud-storage-v2/pom.xml b/grpc-google-cloud-storage-v2/pom.xml
index 264dd02eae..a8e15cd49f 100644
--- a/grpc-google-cloud-storage-v2/pom.xml
+++ b/grpc-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
grpc-google-cloud-storage-v2
GRPC library for grpc-google-cloud-storage-v2
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
diff --git a/pom.xml b/pom.xml
index c0f3437a32..7f85bcb5d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-storage-parent
pom
- 2.52.2
+ 2.52.3
Storage Parent
https://github.com/googleapis/java-storage
@@ -14,7 +14,7 @@
com.google.cloud
sdk-platform-java-config
- 3.47.0
+ 3.48.0
@@ -82,17 +82,17 @@
com.google.cloud
google-cloud-storage
- 2.52.2
+ 2.52.3
com.google.apis
google-api-services-storage
- v1-rev20250424-2.0.0
+ v1-rev20250509-2.0.0
com.google.cloud
google-cloud-pubsub
- 1.139.2
+ 1.139.3
test
@@ -104,32 +104,32 @@
com.google.api.grpc
proto-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
grpc-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
gapic-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
grpc-google-cloud-storage-control-v2
- 2.52.2
+ 2.52.3
com.google.api.grpc
proto-google-cloud-storage-control-v2
- 2.52.2
+ 2.52.3
com.google.cloud
google-cloud-storage-control
- 2.52.2
+ 2.52.3
com.google.cloud
diff --git a/proto-google-cloud-storage-control-v2/pom.xml b/proto-google-cloud-storage-control-v2/pom.xml
index 1777c386e4..993f3f4849 100644
--- a/proto-google-cloud-storage-control-v2/pom.xml
+++ b/proto-google-cloud-storage-control-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-storage-control-v2
- 2.52.2
+ 2.52.3
proto-google-cloud-storage-control-v2
Proto library for proto-google-cloud-storage-control-v2
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
diff --git a/proto-google-cloud-storage-v2/pom.xml b/proto-google-cloud-storage-v2/pom.xml
index e008067e7f..43c5ed9c02 100644
--- a/proto-google-cloud-storage-v2/pom.xml
+++ b/proto-google-cloud-storage-v2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-storage-v2
- 2.52.2
+ 2.52.3
proto-google-cloud-storage-v2
PROTO library for proto-google-cloud-storage-v2
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 39a6acae58..0fd3d7e6de 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -30,12 +30,12 @@
com.google.cloud
google-cloud-storage
- 2.52.1
+ 2.52.2
com.google.cloud
google-cloud-storage-control
- 2.52.1
+ 2.52.2
@@ -66,13 +66,13 @@
com.google.cloud
google-cloud-pubsub
- 1.139.2
+ 1.139.3
test
com.google.cloud
google-cloud-storage
- 2.52.1
+ 2.52.2
tests
test
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 901ed9ddc6..20796494fb 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,12 +28,12 @@
com.google.cloud
google-cloud-storage
- 2.52.2
+ 2.52.3
com.google.cloud
google-cloud-storage-control
- 2.52.2
+ 2.52.3
compile
@@ -58,13 +58,13 @@
com.google.cloud
google-cloud-pubsub
- 1.139.2
+ 1.139.3
test
com.google.cloud
google-cloud-storage
- 2.52.2
+ 2.52.3
tests
test
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 5805f82216..0f01a0842c 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -76,7 +76,7 @@
com.google.cloud
google-cloud-pubsub
- 1.139.2
+ 1.139.3
test
@@ -93,7 +93,7 @@
com.google.cloud
google-cloud-storage
- 2.52.1
+ 2.52.2
tests
test
diff --git a/storage-shared-benchmarking/pom.xml b/storage-shared-benchmarking/pom.xml
index a314aa64bc..1fde6135ae 100644
--- a/storage-shared-benchmarking/pom.xml
+++ b/storage-shared-benchmarking/pom.xml
@@ -10,7 +10,7 @@
com.google.cloud
google-cloud-storage-parent
- 2.52.2
+ 2.52.3
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-storage
- 2.52.2
+ 2.52.3
tests
diff --git a/versions.txt b/versions.txt
index 67897c57e6..869aca8d55 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,10 +1,10 @@
# Format:
# module:released-version:current-version
-google-cloud-storage:2.52.2:2.52.2
-gapic-google-cloud-storage-v2:2.52.2:2.52.2
-grpc-google-cloud-storage-v2:2.52.2:2.52.2
-proto-google-cloud-storage-v2:2.52.2:2.52.2
-google-cloud-storage-control:2.52.2:2.52.2
-proto-google-cloud-storage-control-v2:2.52.2:2.52.2
-grpc-google-cloud-storage-control-v2:2.52.2:2.52.2
+google-cloud-storage:2.52.3:2.52.3
+gapic-google-cloud-storage-v2:2.52.3:2.52.3
+grpc-google-cloud-storage-v2:2.52.3:2.52.3
+proto-google-cloud-storage-v2:2.52.3:2.52.3
+google-cloud-storage-control:2.52.3:2.52.3
+proto-google-cloud-storage-control-v2:2.52.3:2.52.3
+grpc-google-cloud-storage-control-v2:2.52.3:2.52.3