Skip to content

Commit 9276fbf

Browse files
authored
chore: minor fixes/additions to big query telemetry IT tests (#12622)
Some minor clean up for bigquery integration testing for telemetry based on [test plan](https://docs.google.com/document/d/1olUna4K1rwYE01Vi3WFlvUWFMvioDEyPGAb1GSJ0Tcs/edit?tab=t.cxx1cn1fn9r0). This PR includes: 1) renaming repo to mono repo 2) migrating attribute keys to appropriate file 3) adding check for client kind and span status, as well as validating attributes that should not be set are null 4) added missing test for telemetry disabled if flag is not set
1 parent 4b5e8af commit 9276fbf

File tree

4 files changed

+45
-15
lines changed

4 files changed

+45
-15
lines changed

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public final class BigQueryTelemetryTracer {
3232
private BigQueryTelemetryTracer() {}
3333

3434
public static final String BQ_GCP_CLIENT_SERVICE = "bigquery";
35-
public static final String BQ_GCP_CLIENT_REPO = "googleapis/java-bigquery";
35+
public static final String BQ_GCP_CLIENT_REPO = "googleapis/google-cloud-java";
3636
public static final String BQ_GCP_CLIENT_ARTIFACT = "google-cloud-bigquery";
3737
public static final String BQ_GCP_CLIENT_LANGUAGE = "java";
3838

@@ -61,10 +61,6 @@ private BigQueryTelemetryTracer() {}
6161
public static final AttributeKey<String> STATUS_MESSAGE =
6262
AttributeKey.stringKey("status.message");
6363

64-
// Common Server Attributes
65-
public static final AttributeKey<String> SERVER_ADDRESS =
66-
AttributeKey.stringKey("server.address");
67-
public static final AttributeKey<Long> SERVER_PORT = AttributeKey.longKey("server.port");
6864
public static final AttributeKey<String> URL_TEMPLATE = AttributeKey.stringKey("url.template");
6965
public static final AttributeKey<String> URL_DOMAIN = AttributeKey.stringKey("url.domain");
7066

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public class HttpTracingRequestInitializer implements HttpRequestInitializer {
5151
AttributeKey.longKey("http.request.body.size");
5252
public static final AttributeKey<Long> HTTP_RESPONSE_BODY_SIZE =
5353
AttributeKey.longKey("http.response.body.size");
54+
public static final AttributeKey<String> SERVER_ADDRESS =
55+
AttributeKey.stringKey("server.address");
56+
public static final AttributeKey<Long> SERVER_PORT = AttributeKey.longKey("server.port");
5457

5558
@VisibleForTesting public static final String HTTP_RPC_SYSTEM_NAME = "http";
5659

@@ -119,10 +122,10 @@ private void addInitialHttpAttributesToSpan(Span span, HttpRequest request) {
119122
BigQueryTelemetryTracer.addCommonAttributeToSpan(span);
120123
span.setAttribute(BigQueryTelemetryTracer.RPC_SYSTEM_NAME, HTTP_RPC_SYSTEM_NAME);
121124
String host = request.getUrl().getHost();
122-
span.setAttribute(BigQueryTelemetryTracer.SERVER_ADDRESS, host);
125+
span.setAttribute(SERVER_ADDRESS, host);
123126
int port = request.getUrl().getPort();
124127
if (port > 0) {
125-
span.setAttribute(BigQueryTelemetryTracer.SERVER_PORT, (long) port);
128+
span.setAttribute(SERVER_PORT, (long) port);
126129
}
127130
span.setAttribute(URL_FULL, getSanitizedUrl(request));
128131
}

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITOpenTelemetryTest.java

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.junit.jupiter.api.Assertions.assertEquals;
2020
import static org.junit.jupiter.api.Assertions.assertFalse;
2121
import static org.junit.jupiter.api.Assertions.assertNotNull;
22+
import static org.junit.jupiter.api.Assertions.assertNull;
2223
import static org.junit.jupiter.api.Assertions.assertTrue;
2324
import static org.junit.jupiter.api.Assertions.fail;
2425

@@ -30,11 +31,13 @@
3031
import com.google.cloud.bigquery.testing.RemoteBigQueryHelper;
3132
import io.opentelemetry.api.OpenTelemetry;
3233
import io.opentelemetry.api.common.AttributeKey;
34+
import io.opentelemetry.api.trace.SpanKind;
3335
import io.opentelemetry.api.trace.Tracer;
3436
import io.opentelemetry.sdk.OpenTelemetrySdk;
3537
import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
3638
import io.opentelemetry.sdk.trace.SdkTracerProvider;
3739
import io.opentelemetry.sdk.trace.data.SpanData;
40+
import io.opentelemetry.sdk.trace.data.StatusData;
3841
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
3942
import java.io.IOException;
4043
import java.util.List;
@@ -86,12 +89,15 @@ public void testListDatasetsTraced() {
8689
for (SpanData span : spans) {
8790
if (span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.listDatasets")) {
8891
foundRpcSpan = true;
92+
assertEquals(SpanKind.CLIENT, span.getKind());
93+
assertEquals(StatusData.unset(), span.getStatus());
8994
Map<AttributeKey<?>, Object> attrs = span.getAttributes().asMap();
9095
checkGeneralAttributes(attrs);
9196
assertEquals("GET", attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_METHOD));
9297
assertEquals("DatasetService", attrs.get(AttributeKey.stringKey("bq.rpc.service")));
9398
assertEquals("ListDatasets", attrs.get(AttributeKey.stringKey("bq.rpc.method")));
94-
assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.SERVER_ADDRESS));
99+
assertEquals(
100+
"bigquery.googleapis.com", attrs.get(HttpTracingRequestInitializer.SERVER_ADDRESS));
95101
assertEquals(200L, attrs.get(HttpTracingRequestInitializer.HTTP_RESPONSE_STATUS_CODE));
96102
assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.URL_DOMAIN));
97103
assertEquals(
@@ -102,6 +108,10 @@ public void testListDatasetsTraced() {
102108
attrs.get(BigQueryTelemetryTracer.GCP_RESOURCE_DESTINATION_ID));
103109
assertEquals(
104110
"projects/{+projectId}/datasets", attrs.get(BigQueryTelemetryTracer.URL_TEMPLATE));
111+
assertNull(attrs.get(BigQueryTelemetryTracer.STATUS_MESSAGE));
112+
assertNull(attrs.get(BigQueryTelemetryTracer.ERROR_TYPE));
113+
assertNull(attrs.get(BigQueryTelemetryTracer.EXCEPTION_TYPE));
114+
assertNull(attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_RESEND_COUNT));
105115
}
106116
}
107117
assertTrue(foundRpcSpan, "Expected to find BigQueryRpc.listDatasets span");
@@ -126,6 +136,8 @@ public void testGetDatasetNotFoundTraced() {
126136
for (SpanData span : spans) {
127137
if (span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.getDataset")) {
128138
foundRpcSpan = true;
139+
assertEquals(SpanKind.CLIENT, span.getKind());
140+
assertEquals(StatusData.error(), span.getStatus());
129141
Map<AttributeKey<?>, Object> attrs = span.getAttributes().asMap();
130142
checkGeneralAttributes(attrs);
131143
assertEquals("GET", attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_METHOD));
@@ -138,7 +150,8 @@ public void testGetDatasetNotFoundTraced() {
138150
assertEquals(
139151
"https://bigquery.googleapis.com/bigquery/v2/projects/gcloud-devel/datasets/non_existent_dataset?prettyPrint=false",
140152
attrs.get(HttpTracingRequestInitializer.URL_FULL));
141-
assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.SERVER_ADDRESS));
153+
assertEquals(
154+
"bigquery.googleapis.com", attrs.get(HttpTracingRequestInitializer.SERVER_ADDRESS));
142155
assertEquals("bigquery.googleapis.com", attrs.get(BigQueryTelemetryTracer.URL_DOMAIN));
143156
assertEquals(
144157
"//bigquery.googleapis.com/projects/gcloud-devel/datasets/non_existent_dataset",
@@ -155,7 +168,7 @@ public void testGetDatasetNotFoundTraced() {
155168
}
156169

157170
@Test
158-
public void testConnectionErrorRetriesTraced() {
171+
public void testClientErrorAndRetriesTraced() {
159172
// Pass invalid host to force connection error and retries
160173
BigQuery bq =
161174
bigqueryHelper.getOptions().toBuilder()
@@ -181,14 +194,16 @@ public void testConnectionErrorRetriesTraced() {
181194
for (SpanData span : spans) {
182195
if (span.getName().equals("com.google.cloud.bigquery.BigQueryRpc.listDatasets")) {
183196
rpcSpanCount++;
197+
assertEquals(SpanKind.CLIENT, span.getKind());
198+
assertEquals(StatusData.error().getStatusCode(), span.getStatus().getStatusCode());
184199
Map<AttributeKey<?>, Object> attrs = span.getAttributes().asMap();
185200
checkGeneralAttributes(attrs);
186201
assertEquals(
187202
"https://invalid-host-name-12345.com:8080/bigquery/v2/projects/gcloud-devel/datasets?prettyPrint=false",
188203
(String) attrs.get(HttpTracingRequestInitializer.URL_FULL));
189204
assertEquals(
190-
"invalid-host-name-12345.com", attrs.get(BigQueryTelemetryTracer.SERVER_ADDRESS));
191-
assertEquals(8080L, attrs.get(BigQueryTelemetryTracer.SERVER_PORT));
205+
"invalid-host-name-12345.com", attrs.get(HttpTracingRequestInitializer.SERVER_ADDRESS));
206+
assertEquals(8080L, attrs.get(HttpTracingRequestInitializer.SERVER_PORT));
192207
assertEquals("invalid-host-name-12345.com", attrs.get(BigQueryTelemetryTracer.URL_DOMAIN));
193208
assertEquals(
194209
"projects/{+projectId}/datasets", attrs.get(BigQueryTelemetryTracer.URL_TEMPLATE));
@@ -254,11 +269,26 @@ public void testSimultaneousCallsDoNotAffectResendCountForEachother() {
254269
assertEquals(5, cancelJobSpanCount, "Expected 5 attempts total for cancelJob call");
255270
}
256271

272+
@Test
273+
public void testTracingDisabledNoSpansCollected() {
274+
BigQuery bq =
275+
bigqueryHelper.getOptions().toBuilder()
276+
.setEnableOpenTelemetryTracing(false)
277+
.setOpenTelemetryTracer(tracer)
278+
.build()
279+
.getService();
280+
281+
bq.listDatasets();
282+
283+
List<SpanData> spans = memoryExporter.getFinishedSpanItems();
284+
assertTrue(spans.isEmpty(), "Expected no spans to be collected when tracing is disabled");
285+
}
286+
257287
private static void checkRetryAttribute(SpanData span, int listDataSpanCount) {
258288
Map<AttributeKey<?>, Object> attrs = span.getAttributes().asMap();
259289
Long resendCount = (Long) attrs.get(HttpTracingRequestInitializer.HTTP_REQUEST_RESEND_COUNT);
260290
if (listDataSpanCount == 1) {
261-
assertTrue(resendCount == null || resendCount == 0);
291+
assertNull(resendCount, "Expected no resend count for first attempt");
262292
} else {
263293
assertNotNull(resendCount, "Expected resend count for retry attempt " + listDataSpanCount);
264294
assertEquals((long) (listDataSpanCount - 1), resendCount.longValue());

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,9 @@ private void closeAndVerifySpanData(
435435
assertEquals(1, spans.size());
436436
SpanData span = spans.get(0);
437437
assertEquals(SPAN_NAME, span.getName());
438-
assertEquals(BIGQUERY_DOMAIN, span.getAttributes().get(BigQueryTelemetryTracer.SERVER_ADDRESS));
439-
assertEquals(443, span.getAttributes().get(BigQueryTelemetryTracer.SERVER_PORT));
438+
assertEquals(
439+
BIGQUERY_DOMAIN, span.getAttributes().get(HttpTracingRequestInitializer.SERVER_ADDRESS));
440+
assertEquals(443, span.getAttributes().get(HttpTracingRequestInitializer.SERVER_PORT));
440441
assertEquals(
441442
BigQueryTelemetryTracer.BQ_GCP_CLIENT_SERVICE,
442443
span.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_SERVICE));

0 commit comments

Comments
 (0)