Skip to content

Commit abeec06

Browse files
authored
Merge branch 'main' into trace-propagation-integration-test-pr5
2 parents 230ffac + 5944127 commit abeec06

33 files changed

+1125
-176
lines changed

.github/workflows/ci.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,33 @@ on:
2020
pull_request:
2121
name: ci
2222
jobs:
23+
# detect whether or note we should run "bulk" (non-handwritten) unit tests
24+
bulk-filter:
25+
runs-on: ubuntu-latest
26+
permissions:
27+
pull-requests: read
28+
# Set job outputs to values from filter step
29+
outputs:
30+
src: ${{ steps.filter.outputs.src }}
31+
ci: ${{ steps.filter.outputs.ci }}
32+
steps:
33+
- uses: actions/checkout@v4
34+
- uses: dorny/paths-filter@v3
35+
id: filter
36+
with:
37+
# we want to run tests if source code is changed or the scripts
38+
# used to run the unit tests
39+
filters: |
40+
src:
41+
- '**/*.java'
42+
- '**/pom.xml'
43+
ci:
44+
- '.github/workflows/ci.yaml'
45+
- '.kokoro/**'
46+
# these unit tests are "bulk" (non-handwritten) libraries
2347
units:
2448
runs-on: ubuntu-latest
49+
needs: bulk-filter
2550
strategy:
2651
fail-fast: false
2752
matrix:
@@ -42,11 +67,13 @@ jobs:
4267
path: ~/.m2/repository
4368
key: ${{ runner.os }}-maven-unified-${{ steps.date.outputs.week_of_year }}
4469
- run: .kokoro/build.sh
70+
if: ${{ needs.bulk-filter.outputs.src == 'true' || needs.bulk-filter.outputs.ci == 'true' }}
4571
env:
4672
JOB_TYPE: test
4773
JOB_NAME: units-${{matrix.java}}
4874
units-8-runtime:
4975
runs-on: ubuntu-latest
76+
needs: bulk-filter
5077
name: "units (8)"
5178
steps:
5279
- name: Get current week within the year
@@ -73,6 +100,7 @@ jobs:
73100
path: ~/.m2/repository
74101
key: ${{ runner.os }}-maven-unified-${{ steps.date.outputs.week_of_year }}
75102
- run: .kokoro/build.sh
103+
if: ${{ needs.bulk-filter.outputs.src == 'true' || needs.bulk-filter.outputs.ci == 'true' }}
76104
shell: bash
77105
env:
78106
JOB_TYPE: test

.github/workflows/hermetic_library_generation.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@ jobs:
4343
base_ref: ${{ github.base_ref }}
4444
head_ref: ${{ github.head_ref }}
4545
token: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }}
46+
force_regenerate_all: ${{ github.event.pull_request.head.ref == 'generate-libraries-main' }}
4647
image_tag: 2.68.1-SNAPSHOT # {x-version-update:gapic-generator-java:current}

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@ 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";
37-
public static final String BQ_GCP_CLIENT_LANGUAGE = "java";
3837

3938
// TODO: migrate to use gax attributes keys
4039
// https://github.com/googleapis/google-cloud-java/issues/12099
@@ -47,8 +46,6 @@ private BigQueryTelemetryTracer() {}
4746
AttributeKey.stringKey("gcp.client.repo");
4847
public static final AttributeKey<String> GCP_CLIENT_ARTIFACT =
4948
AttributeKey.stringKey("gcp.client.artifact");
50-
public static final AttributeKey<String> GCP_CLIENT_LANGUAGE =
51-
AttributeKey.stringKey("gcp.client.language");
5249
public static final AttributeKey<String> GCP_RESOURCE_DESTINATION_ID =
5350
AttributeKey.stringKey("gcp.resource.destination.id");
5451
public static final AttributeKey<String> RPC_SYSTEM_NAME =
@@ -61,18 +58,13 @@ private BigQueryTelemetryTracer() {}
6158
public static final AttributeKey<String> STATUS_MESSAGE =
6259
AttributeKey.stringKey("status.message");
6360

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");
6861
public static final AttributeKey<String> URL_TEMPLATE = AttributeKey.stringKey("url.template");
6962
public static final AttributeKey<String> URL_DOMAIN = AttributeKey.stringKey("url.domain");
7063

7164
public static void addCommonAttributeToSpan(Span span) {
7265
span.setAttribute(GCP_CLIENT_SERVICE, BQ_GCP_CLIENT_SERVICE)
7366
.setAttribute(GCP_CLIENT_REPO, BQ_GCP_CLIENT_REPO)
7467
.setAttribute(GCP_CLIENT_ARTIFACT, BQ_GCP_CLIENT_ARTIFACT)
75-
.setAttribute(GCP_CLIENT_LANGUAGE, BQ_GCP_CLIENT_LANGUAGE)
7668
.setAttribute(GCP_CLIENT_VERSION, Version.VERSION);
7769
}
7870

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 & 9 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());
@@ -275,9 +305,6 @@ private void checkGeneralAttributes(Map<AttributeKey<?>, Object> attrs) {
275305
assertEquals(
276306
BigQueryTelemetryTracer.BQ_GCP_CLIENT_REPO,
277307
attrs.get(BigQueryTelemetryTracer.GCP_CLIENT_REPO));
278-
assertEquals(
279-
BigQueryTelemetryTracer.BQ_GCP_CLIENT_LANGUAGE,
280-
attrs.get(BigQueryTelemetryTracer.GCP_CLIENT_LANGUAGE));
281308
assertEquals(
282309
BigQueryTelemetryTracer.BQ_GCP_CLIENT_ARTIFACT,
283310
attrs.get(BigQueryTelemetryTracer.GCP_CLIENT_ARTIFACT));

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,6 @@ public void testAddCommonAttributeToSpan() {
181181
assertEquals(
182182
BigQueryTelemetryTracer.BQ_GCP_CLIENT_ARTIFACT,
183183
spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_ARTIFACT));
184-
assertEquals(
185-
BigQueryTelemetryTracer.BQ_GCP_CLIENT_LANGUAGE,
186-
spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_LANGUAGE));
187184
assertEquals(
188185
Version.VERSION, spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_VERSION));
189186
}

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

Lines changed: 3 additions & 5 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));
@@ -446,9 +447,6 @@ private void closeAndVerifySpanData(
446447
assertEquals(
447448
BigQueryTelemetryTracer.BQ_GCP_CLIENT_ARTIFACT,
448449
span.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_ARTIFACT));
449-
assertEquals(
450-
BigQueryTelemetryTracer.BQ_GCP_CLIENT_LANGUAGE,
451-
span.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_LANGUAGE));
452450
assertEquals(
453451
HttpTracingRequestInitializer.HTTP_RPC_SYSTEM_NAME,
454452
span.getAttributes().get(BigQueryTelemetryTracer.RPC_SYSTEM_NAME));

release-please-config.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@
88
"packages": {
99
".": {
1010
"extra-files": [
11+
{
12+
"type": "generic",
13+
"path": "java-*/**/Version.java",
14+
"glob": true
15+
},
16+
{
17+
"type": "generic",
18+
"path": "sdk-platform-java/java-showcase*/Version.java",
19+
"glob": true
20+
},
1121
".github/workflows/generated_files_sync.yaml",
1222
".github/workflows/hermetic_library_generation.yaml",
1323
"sdk-platform-java/WORKSPACE",

sdk-platform-java/.github/scripts/action.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ inputs:
3636
token:
3737
description: Personal Access Token
3838
required: true
39+
force_regenerate_all:
40+
description: true if we want to regenerate all libraries
41+
required: false
3942

4043
runs:
4144
using: "composite"
@@ -76,10 +79,12 @@ runs:
7679
--target_branch "${BASE_REF}" \
7780
--current_branch "${HEAD_REF}" \
7881
--showcase_mode "${SHOWCASE_MODE}" \
79-
--image_tag "${IMAGE_TAG}"
82+
--image_tag "${IMAGE_TAG}" \
83+
--force_regenerate_all "${FORCE_REGENERATE_ALL}"
8084
env:
8185
BASE_REF: ${{ inputs.base_ref }}
8286
HEAD_REF: ${{ inputs.head_ref }}
8387
IMAGE_TAG: ${{ inputs.image_tag }}
8488
SHOWCASE_MODE: ${{ inputs.showcase_mode }}
8589
GH_TOKEN: ${{ inputs.token }}
90+
FORCE_REGENERATE_ALL: ${{ inputs.force_regenerate_all }}

sdk-platform-java/.github/scripts/hermetic_library_generation.sh

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ case "${key}" in
5050
showcase_mode="$2"
5151
shift
5252
;;
53+
--force_regenerate_all)
54+
force_regenerate_all="$2"
55+
shift
56+
;;
5357
*)
5458
echo "Invalid option: [$1]"
5559
exit 1
@@ -81,6 +85,10 @@ if [ -z "${image_tag}" ]; then
8185
image_tag=$(grep "gapic_generator_version" "${generation_config}" | cut -d ':' -f 2 | xargs)
8286
fi
8387

88+
if [ -z "${force_regenerate_all}" ]; then
89+
force_regenerate_all="false"
90+
fi
91+
8492
workspace_name="/workspace"
8593
baseline_generation_config="baseline_generation_config.yaml"
8694
message="chore: generate libraries at $(date)"
@@ -109,7 +117,8 @@ fi
109117
changed_libraries_file="$(mktemp)"
110118
python hermetic_build/common/cli/get_changed_libraries.py create \
111119
--baseline-generation-config-path="${baseline_generation_config}" \
112-
--current-generation-config-path="${generation_config}" | tee "${changed_libraries_file}"
120+
--current-generation-config-path="${generation_config}"\
121+
--force-regenerate-all="${force_regenerate_all}" | tee "${changed_libraries_file}"
113122
changed_libraries="$(cat "${changed_libraries_file}")"
114123
echo "Changed libraries are: ${changed_libraries:-"No changed library"}."
115124

0 commit comments

Comments
 (0)