Skip to content

Commit 87e5287

Browse files
committed
added url.template attribute
# Conflicts: # java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java # java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpcTest.java
1 parent 3e9e3e2 commit 87e5287

2 files changed

Lines changed: 78 additions & 36 deletions

File tree

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java

Lines changed: 71 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ public Dataset getDatasetSkipExceptionTranslation(
193193
"DatasetService",
194194
"GetDataset",
195195
gcpResourceDestinationId,
196-
options),
196+
options,
197+
bqGetRequest.getUriTemplate()),
197198
span -> {
198199
Dataset dataset = bqGetRequest.execute();
199200
if (span != null) {
@@ -243,7 +244,8 @@ public Tuple<String, Iterable<Dataset>> listDatasetsSkipExceptionTranslation(
243244
"DatasetService",
244245
"ListDatasets",
245246
gcpResourceDestinationId,
246-
options),
247+
options,
248+
datasetsListRequest.getUriTemplate()),
247249
span -> {
248250
if (span != null) {
249251
span.setAttribute("bq.rpc.page_token", datasetsListRequest.getPageToken());
@@ -301,7 +303,8 @@ public Dataset createSkipExceptionTranslation(Dataset dataset, Map<Option, ?> op
301303
"DatasetService",
302304
"InsertDataset",
303305
gcpResourceDestinationId,
304-
options),
306+
options,
307+
bqCreateRequest.getUriTemplate()),
305308
span -> {
306309
Dataset datasetResponse = bqCreateRequest.execute();
307310
if (span != null) {
@@ -354,7 +357,8 @@ public Table createSkipExceptionTranslation(Table table, Map<Option, ?> options)
354357
"TableService",
355358
"InsertTable",
356359
gcpResourceDestinationId,
357-
options),
360+
options,
361+
bqCreateRequest.getUriTemplate()),
358362
span -> {
359363
Table tableResponse = bqCreateRequest.execute();
360364
if (span != null) {
@@ -405,7 +409,8 @@ public Routine createSkipExceptionTranslation(Routine routine, Map<Option, ?> op
405409
"RoutineService",
406410
"InsertRoutine",
407411
gcpResourceDestinationId,
408-
options),
412+
options,
413+
bqCreateRequest.getUriTemplate()),
409414
span -> {
410415
Routine routineResponse = bqCreateRequest.execute();
411416
if (span != null) {
@@ -456,7 +461,8 @@ public Job createSkipExceptionTranslation(Job job, Map<Option, ?> options) throw
456461
"JobService",
457462
"InsertJob",
458463
gcpResourceDestinationId,
459-
options),
464+
options,
465+
bqCreateRequest.getUriTemplate()),
460466
span -> {
461467
Job jobResponse = bqCreateRequest.execute();
462468
if (span != null) {
@@ -504,7 +510,8 @@ public Job createJobForQuerySkipExceptionTranslation(Job job) throws IOException
504510
"JobService",
505511
"InsertJob",
506512
gcpResourceDestinationId,
507-
null),
513+
null,
514+
bqCreateRequest.getUriTemplate()),
508515
span -> {
509516
Job jobResponse = bqCreateRequest.execute();
510517
if (span != null) {
@@ -558,7 +565,8 @@ public boolean deleteDatasetSkipExceptionTranslation(
558565
"DatasetService",
559566
"DeleteDataset",
560567
gcpResourceDestinationId,
561-
options),
568+
options,
569+
bqDeleteRequest.getUriTemplate()),
562570
span -> {
563571
bqDeleteRequest.execute();
564572
return true;
@@ -609,7 +617,8 @@ public Dataset patchSkipExceptionTranslation(Dataset dataset, Map<Option, ?> opt
609617
"DatasetService",
610618
"PatchDataset",
611619
gcpResourceDestinationId,
612-
options),
620+
options,
621+
bqPatchRequest.getUriTemplate()),
613622
span -> {
614623
Dataset datasetResponse = bqPatchRequest.execute();
615624
if (span != null) {
@@ -664,7 +673,8 @@ public Table patchSkipExceptionTranslation(Table table, Map<Option, ?> options)
664673
"TableService",
665674
"PatchTable",
666675
gcpResourceDestinationId,
667-
options),
676+
options,
677+
bqPatchRequest.getUriTemplate()),
668678
span -> {
669679
Table tableResponse = bqPatchRequest.execute();
670680
if (span != null) {
@@ -721,7 +731,8 @@ public Table getTableSkipExceptionTranslation(
721731
"TableService",
722732
"GetTable",
723733
gcpResourceDestinationId,
724-
options),
734+
options,
735+
bqGetRequest.getUriTemplate()),
725736
span -> {
726737
Table tableResponse = bqGetRequest.execute();
727738
if (span != null) {
@@ -779,7 +790,8 @@ public Tuple<String, Iterable<Table>> listTablesSkipExceptionTranslation(
779790
"TableService",
780791
"ListTables",
781792
gcpResourceDestinationId,
782-
options),
793+
options,
794+
tableListRequest.getUriTemplate()),
783795
span -> {
784796
if (span != null) {
785797
span.setAttribute("bq.rpc.page_token", tableListRequest.getPageToken());
@@ -853,7 +865,8 @@ public boolean deleteTableSkipExceptionTranslation(
853865
"TableService",
854866
"DeleteTable",
855867
gcpResourceDestinationId,
856-
null),
868+
null,
869+
bqDeleteRequest.getUriTemplate()),
857870
span -> {
858871
bqDeleteRequest.execute();
859872
return true;
@@ -902,7 +915,8 @@ public Model patchSkipExceptionTranslation(Model model, Map<Option, ?> options)
902915
"com.google.cloud.bigquery.BigQueryRpc.patchModel",
903916
"ModelService",
904917
"PatchModel",
905-
gcpResourceDestinationId,
918+
options,
919+
bqPatchRequest.getUriTemplate()),
906920
options),
907921
span -> {
908922
Model modelResponse = bqPatchRequest.execute();
@@ -960,7 +974,7 @@ public Model getModelSkipExceptionTranslation(
960974
"ModelService",
961975
"GetModel",
962976
gcpResourceDestinationId,
963-
options),
977+
options, bqGetRequest.getUriTemplate()),
964978
span -> {
965979
Model modelResponse = bqGetRequest.execute();
966980
if (span != null) {
@@ -1012,7 +1026,8 @@ public Tuple<String, Iterable<Model>> listModelsSkipExceptionTranslation(
10121026
"ModelService",
10131027
"ListModels",
10141028
gcpResourceDestinationId,
1015-
options),
1029+
options,
1030+
modelListRequest.getUriTemplate()),
10161031
span -> {
10171032
if (span != null) {
10181033
span.setAttribute("bq.rpc.page_token", modelListRequest.getPageToken());
@@ -1070,7 +1085,8 @@ public boolean deleteModelSkipExceptionTranslation(
10701085
"ModelService",
10711086
"DeleteModel",
10721087
gcpResourceDestinationId,
1073-
null),
1088+
null,
1089+
bqDeleteRequest.getUriTemplate()),
10741090
span -> {
10751091
bqDeleteRequest.execute();
10761092
return true;
@@ -1122,7 +1138,8 @@ public Routine updateSkipExceptionTranslation(Routine routine, Map<Option, ?> op
11221138
"RoutineService",
11231139
"UpdateRoutine",
11241140
gcpResourceDestinationId,
1125-
options),
1141+
options,
1142+
bqUpdateRequest.getUriTemplate()),
11261143
span -> {
11271144
Routine routineResponse = bqUpdateRequest.execute();
11281145
if (span != null) {
@@ -1179,7 +1196,8 @@ public Routine getRoutineSkipExceptionTranslation(
11791196
"RoutineService",
11801197
"GetRoutine",
11811198
gcpResourceDestinationId,
1182-
options),
1199+
options,
1200+
bqGetRequest.getUriTemplate()),
11831201
span -> {
11841202
Routine routineResponse = bqGetRequest.execute();
11851203
if (span != null) {
@@ -1231,7 +1249,8 @@ public Tuple<String, Iterable<Routine>> listRoutinesSkipExceptionTranslation(
12311249
"RoutineService",
12321250
"ListRoutines",
12331251
gcpResourceDestinationId,
1234-
options),
1252+
options,
1253+
routineListRequest.getUriTemplate()),
12351254
span -> {
12361255
if (span != null) {
12371256
span.setAttribute("bq.rpc.page_token", routineListRequest.getPageToken());
@@ -1288,7 +1307,8 @@ public boolean deleteRoutineSkipExceptionTranslation(
12881307
"RoutineService",
12891308
"DeleteRoutine",
12901309
gcpResourceDestinationId,
1291-
null),
1310+
null,
1311+
bqDeleteRequest.getUriTemplate()),
12921312
span -> {
12931313
bqDeleteRequest.execute();
12941314
return true;
@@ -1336,7 +1356,8 @@ public TableDataInsertAllResponse insertAllSkipExceptionTranslation(
13361356
"TableDataService",
13371357
"InsertAll",
13381358
gcpResourceDestinationId,
1339-
null),
1359+
null,
1360+
insertAllRequest.getUriTemplate()),
13401361
span -> insertAllRequest.execute());
13411362
}
13421363

@@ -1387,7 +1408,8 @@ public TableDataList listTableDataSkipExceptionTranslation(
13871408
"TableDataService",
13881409
"List",
13891410
gcpResourceDestinationId,
1390-
options),
1411+
options,
1412+
bqListRequest.getUriTemplate()),
13911413
span -> {
13921414
if (span != null) {
13931415
span.setAttribute("bq.rpc.page_token", bqListRequest.getPageToken());
@@ -1448,7 +1470,8 @@ public TableDataList listTableDataWithRowLimitSkipExceptionTranslation(
14481470
"TableDataService",
14491471
"List",
14501472
gcpResourceDestinationId,
1451-
null),
1473+
null,
1474+
bqListRequest.getUriTemplate()),
14521475
span -> {
14531476
if (span != null) {
14541477
span.setAttribute("bq.rpc.page_token", bqListRequest.getPageToken());
@@ -1500,7 +1523,7 @@ public Job getJobSkipExceptionTranslation(
15001523
"JobService",
15011524
"GetJob",
15021525
gcpResourceDestinationId,
1503-
options),
1526+
options, bqGetRequest.getUriTemplate()),
15041527
span -> {
15051528
Job jobResponse = bqGetRequest.execute();
15061529
if (span != null) {
@@ -1550,7 +1573,7 @@ public Job getQueryJobSkipExceptionTranslation(String projectId, String jobId, S
15501573
"JobService",
15511574
"GetJob",
15521575
gcpResourceDestinationId,
1553-
null),
1576+
null, bqGetRequest.getUriTemplate()),
15541577
span -> {
15551578
Job jobResponse = bqGetRequest.execute();
15561579
if (span != null) {
@@ -1612,7 +1635,7 @@ public Tuple<String, Iterable<Job>> listJobsSkipExceptionTranslation(
16121635
"JobService",
16131636
"ListJobs",
16141637
gcpResourceDestinationId,
1615-
options),
1638+
options, listJobsRequest.getUriTemplate()),
16161639
span -> {
16171640
if (span != null) {
16181641
span.setAttribute("bq.rpc.page_token", listJobsRequest.getPageToken());
@@ -1689,7 +1712,7 @@ public boolean cancelSkipExceptionTranslation(String projectId, String jobId, St
16891712
"JobService",
16901713
"CancelJob",
16911714
gcpResourceDestinationId,
1692-
null),
1715+
null, bqCancelRequest.getUriTemplate()),
16931716
span -> {
16941717
bqCancelRequest.execute();
16951718
return true;
@@ -1730,7 +1753,7 @@ public boolean deleteJobSkipExceptionTranslation(
17301753
"JobService",
17311754
"DeleteJob",
17321755
gcpResourceDestinationId,
1733-
null),
1756+
null,bqDeleteRequest.getUriTemplate()),
17341757
span -> {
17351758
bqDeleteRequest.execute();
17361759
return true;
@@ -1783,7 +1806,8 @@ public GetQueryResultsResponse getQueryResultsSkipExceptionTranslation(
17831806
"JobService",
17841807
"GetQueryResults",
17851808
gcpResourceDestinationId,
1786-
options),
1809+
options,
1810+
queryRequest.getUriTemplate()),
17871811
span -> {
17881812
if (span != null) {
17891813
span.setAttribute("bq.rpc.page_token", queryRequest.getPageToken());
@@ -1835,7 +1859,8 @@ public GetQueryResultsResponse getQueryResultsWithRowLimitSkipExceptionTranslati
18351859
"JobService",
18361860
"GetQueryResults",
18371861
gcpResourceDestinationId,
1838-
null),
1862+
null,
1863+
queryRequest.getUriTemplate()),
18391864
span -> {
18401865
if (span != null) {
18411866
span.setAttribute("bq.rpc.page_token", queryRequest.getPageToken());
@@ -1875,7 +1900,7 @@ public QueryResponse queryRpcSkipExceptionTranslation(String projectId, QueryReq
18751900
"JobService",
18761901
"Query",
18771902
gcpResourceDestinationId,
1878-
null),
1903+
null,queryRequest.getUriTemplate()),
18791904
span -> {
18801905
return queryRequest.execute();
18811906
});
@@ -2006,7 +2031,8 @@ public Policy getIamPolicySkipExceptionTranslation(String resourceId, Map<Option
20062031
"TableService",
20072032
"GetIamPolicy",
20082033
gcpResourceDestinationId,
2009-
options),
2034+
options,
2035+
bqGetRequest.getUriTemplate()),
20102036
span -> {
20112037
return bqGetRequest.execute();
20122038
});
@@ -2042,7 +2068,8 @@ public Policy setIamPolicySkipExceptionTranslation(
20422068
"TableService",
20432069
"SetIamPolicy",
20442070
gcpResourceDestinationId,
2045-
options),
2071+
options,
2072+
bqSetRequest.getUriTemplate()),
20462073
span -> {
20472074
return bqSetRequest.execute();
20482075
});
@@ -2079,7 +2106,8 @@ public TestIamPermissionsResponse testIamPermissionsSkipExceptionTranslation(
20792106
"TableService",
20802107
"TestIamPermissions",
20812108
gcpResourceDestinationId,
2082-
options),
2109+
options,
2110+
bqTestRequest.getUriTemplate()),
20832111
span -> {
20842112
return bqTestRequest.execute();
20852113
});
@@ -2089,13 +2117,15 @@ public TestIamPermissionsResponse testIamPermissionsSkipExceptionTranslation(
20892117
* Helper method to create an OpenTelemetry tracer span with common rpc trace attributes.
20902118
*
20912119
* <p>If isOpenTelemetryTracingEnabled == true creates and returns span, otherwise returns null.
2120+
*
2121+
* @param urlTemplate The URI template for the request, or null if unavailable
20922122
*/
20932123
private Span createRpcTracingSpan(
20942124
String spanName,
20952125
String service,
20962126
String method,
20972127
String gcpResourceDestinationId,
2098-
Map<Option, ?> options) {
2128+
Map<Option, ?> options, String urlTemplate) {
20992129
if (!this.options.isOpenTelemetryTracingEnabled()
21002130
|| this.options.getOpenTelemetryTracer() == null) {
21012131
return null;
@@ -2116,6 +2146,11 @@ private Span createRpcTracingSpan(
21162146
builder.setAllAttributes(otelAttributesFromOptions(options));
21172147
}
21182148

2149+
// Set url.template attribute if available
2150+
if (urlTemplate != null && !urlTemplate.isEmpty()) {
2151+
builder.setAttribute("url.template", urlTemplate);
2152+
}
2153+
21192154
return builder.startSpan();
21202155
}
21212156

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpcTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,13 @@ private void verifySpan(
155155
assertEquals(method, rpcSpan.getAttributes().get(AttributeKey.stringKey("bq.rpc.method")));
156156
assertEquals("http", rpcSpan.getAttributes().get(AttributeKey.stringKey("bq.rpc.system")));
157157

158+
// Verify url.template attribute is present
159+
String urlTemplate = rpcSpan.getAttributes().get(AttributeKey.stringKey("url.template"));
160+
assertNotNull(urlTemplate, "url.template attribute should be set");
161+
assertTrue(
162+
urlTemplate.contains("projects/"),
163+
"url.template should contain 'projects/' but was: " + urlTemplate);
164+
158165
assertEquals(
159166
gcpResourceDestinationId,
160167
rpcSpan.getAttributes().get(BigQueryTelemetryTracer.GCP_RESOURCE_DESTINATION_ID));

0 commit comments

Comments
 (0)