From fe35c4157789de577d0e390679935c40a7a627f7 Mon Sep 17 00:00:00 2001 From: ldetmer Date: Thu, 2 Apr 2026 10:09:19 -0400 Subject: [PATCH] chore: minor fixes/additions to big query telemetry IT tests --- .../telemetry/BigQueryTelemetryTracer.java | 6 +-- .../HttpTracingRequestInitializer.java | 7 +++- .../bigquery/it/ITOpenTelemetryTest.java | 42 ++++++++++++++++--- .../HttpTracingRequestInitializerTest.java | 5 ++- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java index bebc67e3ffde..559ed6632a53 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java @@ -32,7 +32,7 @@ public final class BigQueryTelemetryTracer { private BigQueryTelemetryTracer() {} public static final String BQ_GCP_CLIENT_SERVICE = "bigquery"; - public static final String BQ_GCP_CLIENT_REPO = "googleapis/java-bigquery"; + public static final String BQ_GCP_CLIENT_REPO = "googleapis/google-cloud-java"; public static final String BQ_GCP_CLIENT_ARTIFACT = "google-cloud-bigquery"; public static final String BQ_GCP_CLIENT_LANGUAGE = "java"; @@ -61,10 +61,6 @@ private BigQueryTelemetryTracer() {} public static final AttributeKey STATUS_MESSAGE = AttributeKey.stringKey("status.message"); - // Common Server Attributes - public static final AttributeKey SERVER_ADDRESS = - AttributeKey.stringKey("server.address"); - public static final AttributeKey SERVER_PORT = AttributeKey.longKey("server.port"); public static final AttributeKey URL_TEMPLATE = AttributeKey.stringKey("url.template"); public static final AttributeKey URL_DOMAIN = AttributeKey.stringKey("url.domain"); diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java index 4251613bde34..35ab902bd0e8 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java @@ -51,6 +51,9 @@ public class HttpTracingRequestInitializer implements HttpRequestInitializer { AttributeKey.longKey("http.request.body.size"); public static final AttributeKey HTTP_RESPONSE_BODY_SIZE = AttributeKey.longKey("http.response.body.size"); + public static final AttributeKey SERVER_ADDRESS = + AttributeKey.stringKey("server.address"); + public static final AttributeKey SERVER_PORT = AttributeKey.longKey("server.port"); @VisibleForTesting public static final String HTTP_RPC_SYSTEM_NAME = "http"; @@ -119,10 +122,10 @@ private void addInitialHttpAttributesToSpan(Span span, HttpRequest request) { BigQueryTelemetryTracer.addCommonAttributeToSpan(span); span.setAttribute(BigQueryTelemetryTracer.RPC_SYSTEM_NAME, HTTP_RPC_SYSTEM_NAME); String host = request.getUrl().getHost(); - span.setAttribute(BigQueryTelemetryTracer.SERVER_ADDRESS, host); + span.setAttribute(SERVER_ADDRESS, host); int port = request.getUrl().getPort(); if (port > 0) { - span.setAttribute(BigQueryTelemetryTracer.SERVER_PORT, (long) port); + span.setAttribute(SERVER_PORT, (long) port); } span.setAttribute(URL_FULL, getSanitizedUrl(request)); } diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITOpenTelemetryTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITOpenTelemetryTest.java index 034fa093047e..d42f193c56fd 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITOpenTelemetryTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITOpenTelemetryTest.java @@ -19,6 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; @@ -30,11 +31,13 @@ import com.google.cloud.bigquery.testing.RemoteBigQueryHelper; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.data.StatusData; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; import java.io.IOException; import java.util.List; @@ -86,12 +89,15 @@ public void testListDatasetsTraced() { for (SpanData span : spans) { if (span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.listDatasets")) { foundRpcSpan = true; + assertEquals(SpanKind.CLIENT, span.getKind()); + assertEquals(StatusData.unset(), span.getStatus()); Map, Object> attrs = span.getAttributes().asMap(); checkGeneralAttributes(attrs); assertEquals("GET", attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_METHOD)); assertEquals("DatasetService", attrs.get(AttributeKey.stringKey("bq.rpc.service"))); assertEquals("ListDatasets", attrs.get(AttributeKey.stringKey("bq.rpc.method"))); - assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.SERVER_ADDRESS)); + assertEquals( + "bigquery.googleapis.com", attrs.get(HttpTracingRequestInitializer.SERVER_ADDRESS)); assertEquals(200L, attrs.get(HttpTracingRequestInitializer.HTTP_RESPONSE_STATUS_CODE)); assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.URL_DOMAIN)); assertEquals( @@ -102,6 +108,10 @@ public void testListDatasetsTraced() { attrs.get(BigQueryTelemetryTracer.GCP_RESOURCE_DESTINATION_ID)); assertEquals( "projects/{+projectId}/datasets", attrs.get(BigQueryTelemetryTracer.URL_TEMPLATE)); + assertNull(attrs.get(BigQueryTelemetryTracer.STATUS_MESSAGE)); + assertNull(attrs.get(BigQueryTelemetryTracer.ERROR_TYPE)); + assertNull(attrs.get(BigQueryTelemetryTracer.EXCEPTION_TYPE)); + assertNull(attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_RESEND_COUNT)); } } assertTrue(foundRpcSpan, "Expected to find BigQueryRpc.listDatasets span"); @@ -126,6 +136,8 @@ public void testGetDatasetNotFoundTraced() { for (SpanData span : spans) { if (span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.getDataset")) { foundRpcSpan = true; + assertEquals(SpanKind.CLIENT, span.getKind()); + assertEquals(StatusData.error(), span.getStatus()); Map, Object> attrs = span.getAttributes().asMap(); checkGeneralAttributes(attrs); assertEquals("GET", attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_METHOD)); @@ -138,7 +150,8 @@ public void testGetDatasetNotFoundTraced() { assertEquals( "https://bigquery.googleapis.com/bigquery/v2/projects/gcloud-devel/datasets/non_existent_dataset?prettyPrint=false", attrs.get(HttpTracingRequestInitializer.URL_FULL)); - assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.SERVER_ADDRESS)); + assertEquals( + "bigquery.googleapis.com", attrs.get(HttpTracingRequestInitializer.SERVER_ADDRESS)); assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.URL_DOMAIN)); assertEquals( "//bigquery.googleapis.com/projects/gcloud-devel/datasets/non_existent_dataset", @@ -155,7 +168,7 @@ public void testGetDatasetNotFoundTraced() { } @Test - public void testConnectionErrorRetriesTraced() { + public void testClientErrorAndRetriesTraced() { // Pass invalid host to force connection error and retries BigQuery bq = bigqueryHelper.getOptions().toBuilder() @@ -181,14 +194,16 @@ public void testConnectionErrorRetriesTraced() { for (SpanData span : spans) { if (span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.listDatasets")) { rpcSpanCount++; + assertEquals(SpanKind.CLIENT, span.getKind()); + assertEquals(StatusData.error().getStatusCode(), span.getStatus().getStatusCode()); Map, Object> attrs = span.getAttributes().asMap(); checkGeneralAttributes(attrs); assertEquals( "https://invalid-host-name-12345.com:8080/bigquery/v2/projects/gcloud-devel/datasets?prettyPrint=false", (String) attrs.get(HttpTracingRequestInitializer.URL_FULL)); assertEquals( - "invalid-host-name-12345.com", attrs.get(BigQueryTelemetryTracer.SERVER_ADDRESS)); - assertEquals(8080L, attrs.get(BigQueryTelemetryTracer.SERVER_PORT)); + "invalid-host-name-12345.com", attrs.get(HttpTracingRequestInitializer.SERVER_ADDRESS)); + assertEquals(8080L, attrs.get(HttpTracingRequestInitializer.SERVER_PORT)); assertEquals("invalid-host-name-12345.com", attrs.get(BigQueryTelemetryTracer.URL_DOMAIN)); assertEquals( "projects/{+projectId}/datasets", attrs.get(BigQueryTelemetryTracer.URL_TEMPLATE)); @@ -254,11 +269,26 @@ public void testSimultaneousCallsDoNotAffectResendCountForEachother() { assertEquals(5, cancelJobSpanCount, "Expected 5 attempts total for cancelJob call"); } + @Test + public void testTracingDisabledNoSpansCollected() { + BigQuery bq = + bigqueryHelper.getOptions().toBuilder() + .setEnableOpenTelemetryTracing(false) + .setOpenTelemetryTracer(tracer) + .build() + .getService(); + + bq.listDatasets(); + + List spans = memoryExporter.getFinishedSpanItems(); + assertTrue(spans.isEmpty(), "Expected no spans to be collected when tracing is disabled"); + } + private static void checkRetryAttribute(SpanData span, int listDataSpanCount) { Map, Object> attrs = span.getAttributes().asMap(); Long resendCount = (Long) attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_RESEND_COUNT); if (listDataSpanCount == 1) { - assertTrue(resendCount == null || resendCount == 0); + assertNull(resendCount, "Expected no resend count for first attempt"); } else { assertNotNull(resendCount, "Expected resend count for retry attempt " + listDataSpanCount); assertEquals((long) (listDataSpanCount - 1), resendCount.longValue()); diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java index 16615e532125..8fdaa8a16906 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java @@ -435,8 +435,9 @@ private void closeAndVerifySpanData( assertEquals(1, spans.size()); SpanData span = spans.get(0); assertEquals(SPAN_NAME, span.getName()); - assertEquals(BIGQUERY_DOMAIN, span.getAttributes().get(BigQueryTelemetryTracer.SERVER_ADDRESS)); - assertEquals(443, span.getAttributes().get(BigQueryTelemetryTracer.SERVER_PORT)); + assertEquals( + BIGQUERY_DOMAIN, span.getAttributes().get(HttpTracingRequestInitializer.SERVER_ADDRESS)); + assertEquals(443, span.getAttributes().get(HttpTracingRequestInitializer.SERVER_PORT)); assertEquals( BigQueryTelemetryTracer.BQ_GCP_CLIENT_SERVICE, span.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_SERVICE));