fix(spanner): explicitly close the stream context upon receiving the last message
diff --git a/spanner/read.go b/spanner/read.go index 1c09ac3..711aed9 100644 --- a/spanner/read.go +++ b/spanner/read.go
@@ -684,6 +684,9 @@ span.SetStatus(otcodes.Ok, "Stream finished successfully") span.End() } + if d.cancel != nil { + d.cancel() + } d.changeState(finished) return }
diff --git a/spanner/test/opentelemetry/test/ot_traces_test.go b/spanner/test/opentelemetry/test/ot_traces_test.go index e8412db..03b4988 100644 --- a/spanner/test/opentelemetry/test/ot_traces_test.go +++ b/spanner/test/opentelemetry/test/ot_traces_test.go
@@ -52,6 +52,9 @@ }, }, option.WithGRPCDialOption(grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor(otelgrpc.WithTracerProvider(te.tp))))) defer teardown() + res := server.CreateSingersResults(4, true) + sql := "SELECT SingerId, AlbumId, AlbumTitle FROM Albums WHERE 1=2" + err := server.TestSpanner.PutStatementResult(sql, res) waitFor(t, func() error { if isMultiplexEnabled { @@ -69,8 +72,8 @@ transactionTag = "tx-tag" requestTag = "req-tag" ) - _, err := client.ReadWriteTransactionWithOptions(context.Background(), func(ctx context.Context, tx *spanner.ReadWriteTransaction) error { - iter := tx.QueryWithOptions(ctx, spanner.NewStatement(stestutil.SelectSingerIDAlbumIDAlbumTitleFromAlbums), spanner.QueryOptions{ + _, err = client.ReadWriteTransactionWithOptions(context.Background(), func(ctx context.Context, tx *spanner.ReadWriteTransaction) error { + iter := tx.QueryWithOptions(ctx, spanner.NewStatement(sql), spanner.QueryOptions{ RequestTag: requestTag, }) return iter.Do(func(r *spanner.Row) error { @@ -153,7 +156,7 @@ case "cloud.google.com/go/spanner.RowIterator": if hasAttribute(&span, "statement.tag", requestTag) { foundTaggedQuerySpan = true - if !hasAttribute(&span, "db.statement", stestutil.SelectSingerIDAlbumIDAlbumTitleFromAlbums) { + if !hasAttribute(&span, "db.statement", sql) { t.Errorf("tagged span %q was missing db.statement", span.Name) } if !hasAttribute(&span, "transaction.tag", transactionTag) {