futureValue);
- }
-
- /** Represents a trace context. */
- @InternalApi
- interface Context {
- /** Makes this context the current context. */
- @InternalApi
- Scope makeCurrent();
- }
-
- /** Represents a trace scope. */
- @InternalApi
- interface Scope extends AutoCloseable {
- /** Closes the current scope. */
- @InternalApi
- void close();
- }
-
- /** Starts a new span with the given name, sets it as the current span, and returns it. */
- @InternalApi
- Span startSpan(String spanName, String module);
-
- /**
- * Starts a new span with the given name and the given context as its parent, sets it as the
- * current span, and returns it.
- */
- @InternalApi
- Span startSpan(String spanName, String module, Context parent);
-
- /** Returns the current span. */
- @Nonnull
- @InternalApi
- Span currentSpan();
-
- /** Returns the current Context. */
- @Nonnull
- @InternalApi
- Context currentContext();
-}
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/otel/package-info.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/otel/package-info.java
deleted file mode 100644
index d8fac3ca8e..0000000000
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/otel/package-info.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Set of internal utilities to make our OTel use a bit more terse.
- *
- * All classes, interfaces, etc are considered to be for internal library use only and can break
- * at any time.
- */
-@InternalApi
-package com.google.cloud.storage.otel;
-
-import com.google.api.core.InternalApi;
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTest.java
index b85e6a72f1..3b8957bbac 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTest.java
@@ -16,21 +16,22 @@
package com.google.cloud.storage;
+import static com.google.cloud.storage.TestUtils.assertAll;
+import static com.google.common.truth.Truth.assertThat;
+
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.cloud.storage.otel.TestExporter;
-import com.google.cloud.storage.testing.RemoteStorageHelper;
+import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
-import io.opentelemetry.sdk.trace.export.SpanExporter;
-import java.util.UUID;
-import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -39,12 +40,17 @@
backends = Backend.PROD,
transports = {Transport.HTTP, Transport.GRPC})
public final class ITOpenTelemetryTest {
+
@Inject public Storage storage;
+
+ @Inject public BucketInfo bucket;
+
+ @Inject public Generator generator;
@Inject public Transport transport;
@Test
- public void checkInstrumentation() {
- SpanExporter exporter = new TestExporter();
+ public void checkInstrumentation() throws Exception {
+ TestExporter exporter = new TestExporter();
OpenTelemetrySdk openTelemetrySdk =
OpenTelemetrySdk.builder()
@@ -53,46 +59,33 @@ public void checkInstrumentation() {
.addSpanProcessor(SimpleSpanProcessor.create(exporter))
.build())
.build();
-
StorageOptions storageOptions =
- storage.getOptions().toBuilder().setOpenTelemetrySdk(openTelemetrySdk).build();
- storage = storageOptions.getService();
- String bucket = randomBucketName();
- try {
- storage.create(BucketInfo.of(bucket));
- TestExporter testExported = (TestExporter) exporter;
- SpanData spanData = testExported.getExportedSpans().get(0);
- Assert.assertEquals("Storage", getAttributeValue(spanData, "gcp.client.service"));
- Assert.assertEquals(
- "googleapis/java-storage", getAttributeValue(spanData, "gcp.client.repo"));
- Assert.assertEquals(
- "com.google.cloud:google-cloud-storage",
- getAttributeValue(spanData, "gcp.client.artifact"));
- Assert.assertEquals(
- transport.name().toLowerCase(), getAttributeValue(spanData, "rpc.system"));
- } finally {
- // Cleanup
- RemoteStorageHelper.forceDelete(storage, bucket);
+ storage.getOptions().toBuilder().setOpenTelemetry(openTelemetrySdk).build();
+ try (Storage storage = storageOptions.getService()) {
+ storage.create(BlobInfo.newBuilder(bucket, generator.randomObjectName()).build());
}
+
+ SpanData spanData = exporter.getExportedSpans().get(0);
+ assertAll(
+ () -> assertThat(getAttributeValue(spanData, "gcp.client.service")).isEqualTo("Storage"),
+ () ->
+ assertThat(getAttributeValue(spanData, "gcp.client.repo"))
+ .isEqualTo("googleapis/java-storage"),
+ () ->
+ assertThat(getAttributeValue(spanData, "gcp.client.artifact"))
+ .isEqualTo("com.google.cloud:google-cloud-storage"),
+ () ->
+ assertThat(getAttributeValue(spanData, "rpc.system"))
+ .isEqualTo(transport.name().toLowerCase()));
}
@Test
public void noOpDoesNothing() {
- String bucket = randomBucketName();
- try {
- storage.create(BucketInfo.of(bucket));
- Assert.assertNull(storage.getOptions().getOpenTelemetrySdk());
- } finally {
- // cleanup
- RemoteStorageHelper.forceDelete(storage, bucket);
- }
- }
-
- private String getAttributeValue(SpanData spanData, String key) {
- return spanData.getAttributes().get(AttributeKey.stringKey(key)).toString();
+ assertThat(storage.getOptions().getOpenTelemetry()).isSameInstanceAs(OpenTelemetry.noop());
+ storage.create(BlobInfo.newBuilder(bucket, generator.randomObjectName()).build());
}
- public String randomBucketName() {
- return "java-storage-grpc-rand-" + UUID.randomUUID();
+ private static String getAttributeValue(SpanData spanData, String key) {
+ return spanData.getAttributes().get(AttributeKey.stringKey(key));
}
}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTestbenchTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTestbenchTest.java
index 66f08c61f3..ed999ad0a4 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTestbenchTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITOpenTelemetryTestbenchTest.java
@@ -43,6 +43,7 @@
import java.nio.file.Paths;
import java.util.List;
import java.util.UUID;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -57,7 +58,6 @@ public class ITOpenTelemetryTestbenchTest {
@Inject public Generator generator;
@Inject public BucketInfo testBucket;
@Inject public Storage storage;
- private StorageOptions options;
private SpanExporter exporter;
private static final byte[] helloWorldTextBytes = "hello world".getBytes();
private BlobId blobId;
@@ -73,12 +73,20 @@ public void setUp() {
.addSpanProcessor(SimpleSpanProcessor.create(exporter))
.build())
.build();
- options = storage.getOptions().toBuilder().setOpenTelemetrySdk(openTelemetrySdk).build();
+ StorageOptions options =
+ storage.getOptions().toBuilder().setOpenTelemetry(openTelemetrySdk).build();
storage = options.getService();
String objectString = generator.randomObjectName();
blobId = BlobId.of(testBucket.getName(), objectString);
}
+ @After
+ public void tearDown() throws Exception {
+ if (storage != null) {
+ storage.close();
+ }
+ }
+
@Test
public void runCreateBucket() {
String bucket = "random-bucket" + UUID.randomUUID();