Skip to content

Commit 627c69a

Browse files
authored
fix(bigquery): do not override ctx within inner span creation (#11119)
When creating child spans (mostly inside `runWithRetry` func), parent `context.Context` was being override by the child span `context.Context`, making the parent span to be missing on traces. This PR changes the `ctx` assignment inside those `runWithRetry` to always create a new `context.Context` just for that child span, similar to how it was done in other places like https://togithub.com/googleapis/google-cloud-go/blob/cc88fe1c8d834903e2b5f8d3a7cc9bbd65c70b29/bigquery/job.go#L248 Fixes #10961
1 parent 5af186e commit 627c69a

File tree

5 files changed

+47
-16
lines changed

5 files changed

+47
-16
lines changed

β€Žbigquery/inserter.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ func (u *Inserter) putMulti(ctx context.Context, src []ValueSaver) error {
181181
setClientHeader(call.Header())
182182
var res *bq.TableDataInsertAllResponse
183183
err = runWithRetry(ctx, func() (err error) {
184-
ctx = trace.StartSpan(ctx, "bigquery.tabledata.insertAll")
184+
sCtx := trace.StartSpan(ctx, "bigquery.tabledata.insertAll")
185185
res, err = call.Do()
186-
trace.EndSpan(ctx, err)
186+
trace.EndSpan(sCtx, err)
187187
return err
188188
})
189189
if err != nil {

β€Žbigquery/model.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ func (m *Model) Metadata(ctx context.Context) (mm *ModelMetadata, err error) {
8686
setClientHeader(req.Header())
8787
var model *bq.Model
8888
err = runWithRetry(ctx, func() (err error) {
89-
ctx = trace.StartSpan(ctx, "bigquery.models.get")
89+
sCtx := trace.StartSpan(ctx, "bigquery.models.get")
9090
model, err = req.Do()
91-
trace.EndSpan(ctx, err)
91+
trace.EndSpan(sCtx, err)
9292
return err
9393
})
9494
if err != nil {
@@ -113,9 +113,9 @@ func (m *Model) Update(ctx context.Context, mm ModelMetadataToUpdate, etag strin
113113
}
114114
var res *bq.Model
115115
if err := runWithRetry(ctx, func() (err error) {
116-
ctx = trace.StartSpan(ctx, "bigquery.models.patch")
116+
sCtx := trace.StartSpan(ctx, "bigquery.models.patch")
117117
res, err = call.Do()
118-
trace.EndSpan(ctx, err)
118+
trace.EndSpan(sCtx, err)
119119
return err
120120
}); err != nil {
121121
return nil, err

β€Žbigquery/routine.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ func (r *Routine) Metadata(ctx context.Context) (rm *RoutineMetadata, err error)
9797
setClientHeader(req.Header())
9898
var routine *bq.Routine
9999
err = runWithRetry(ctx, func() (err error) {
100-
ctx = trace.StartSpan(ctx, "bigquery.routines.get")
100+
sCtx := trace.StartSpan(ctx, "bigquery.routines.get")
101101
routine, err = req.Do()
102-
trace.EndSpan(ctx, err)
102+
trace.EndSpan(sCtx, err)
103103
return err
104104
})
105105
if err != nil {
@@ -131,9 +131,9 @@ func (r *Routine) Update(ctx context.Context, upd *RoutineMetadataToUpdate, etag
131131
}
132132
var res *bq.Routine
133133
if err := runWithRetry(ctx, func() (err error) {
134-
ctx = trace.StartSpan(ctx, "bigquery.routines.update")
134+
sCtx := trace.StartSpan(ctx, "bigquery.routines.update")
135135
res, err = call.Do()
136-
trace.EndSpan(ctx, err)
136+
trace.EndSpan(sCtx, err)
137137
return err
138138
}); err != nil {
139139
return nil, err

β€Žbigquery/table.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -721,9 +721,9 @@ func (t *Table) Create(ctx context.Context, tm *TableMetadata) (err error) {
721721
req := t.c.bqs.Tables.Insert(t.ProjectID, t.DatasetID, table).Context(ctx)
722722
setClientHeader(req.Header())
723723
return runWithRetry(ctx, func() (err error) {
724-
ctx = trace.StartSpan(ctx, "bigquery.tables.insert")
724+
sCtx := trace.StartSpan(ctx, "bigquery.tables.insert")
725725
_, err = req.Do()
726-
trace.EndSpan(ctx, err)
726+
trace.EndSpan(sCtx, err)
727727
return err
728728
})
729729
}
@@ -960,9 +960,9 @@ func (t *Table) Delete(ctx context.Context) (err error) {
960960
setClientHeader(call.Header())
961961

962962
return runWithRetry(ctx, func() (err error) {
963-
ctx = trace.StartSpan(ctx, "bigquery.tables.delete")
963+
sCtx := trace.StartSpan(ctx, "bigquery.tables.delete")
964964
err = call.Do()
965-
trace.EndSpan(ctx, err)
965+
trace.EndSpan(sCtx, err)
966966
return err
967967
})
968968
}
@@ -1026,9 +1026,9 @@ func (t *Table) Update(ctx context.Context, tm TableMetadataToUpdate, etag strin
10261026
}
10271027
var res *bq.Table
10281028
if err := runWithRetry(ctx, func() (err error) {
1029-
ctx = trace.StartSpan(ctx, "bigquery.tables.patch")
1029+
sCtx := trace.StartSpan(ctx, "bigquery.tables.patch")
10301030
res, err = tpc.call.Do()
1031-
trace.EndSpan(ctx, err)
1031+
trace.EndSpan(sCtx, err)
10321032
return err
10331033
}); err != nil {
10341034
return nil, err

β€Žbigquery/trace_integration_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,37 @@ func TestIntegration_OpenCensusTracing(t *testing.T) {
9494
},
9595
wantSpans: []string{"bigquery.tables.get", "cloud.google.com/go/bigquery.Table.Metadata"},
9696
},
97+
{
98+
description: "dataset and table insert/update/delete",
99+
callF: func(ctx context.Context) {
100+
ds := client.Dataset(datasetIDs.New())
101+
if err := ds.Create(ctx, nil); err != nil {
102+
t.Fatalf("creating dataset %s: %v", ds.DatasetID, err)
103+
}
104+
defer ds.DeleteWithContents(ctx)
105+
tbl := ds.Table(tableIDs.New())
106+
tm := &TableMetadata{
107+
Schema: schema,
108+
}
109+
if err := tbl.Create(ctx, tm); err != nil {
110+
t.Fatalf("creating table %s: %v", tbl.TableID, err)
111+
}
112+
defer tbl.Delete(ctx)
113+
md := TableMetadataToUpdate{
114+
Description: "new description",
115+
}
116+
if _, err := tbl.Update(ctx, md, ""); err != nil {
117+
t.Fatalf("updating table %s: %v", tbl.TableID, err)
118+
}
119+
},
120+
wantSpans: []string{
121+
"cloud.google.com/go/bigquery.Dataset.Create",
122+
"bigquery.tables.insert", "cloud.google.com/go/bigquery.Table.Create",
123+
"bigquery.tables.patch", "cloud.google.com/go/bigquery.Table.Update",
124+
"bigquery.datasets.delete", "cloud.google.com/go/bigquery.Dataset.Delete",
125+
"bigquery.tables.delete", "cloud.google.com/go/bigquery.Table.Delete",
126+
},
127+
},
97128
} {
98129
t.Run(tc.description, func(t *testing.T) {
99130
exporter := &testExporter{}

0 commit comments

Comments
 (0)