Skip to content

Commit 8de30d7

Browse files
authored
feat(storage): trace span covers life of a Reader (#8390)
Make the tracing span created in NewRangeReader cover the entire lifecycle of the Reader. NewRangeReader returns before the data transfer is complete, so it's more useful to track the entire period until the Reader is closed. NewRangeReader is still tracked with a span at the level of individual transports (HTTP and gRPC).
1 parent 1de0374 commit 8de30d7

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

storage/reader.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,9 @@ func (o *ObjectHandle) NewReader(ctx context.Context) (*Reader, error) {
8787
// that file will be served back whole, regardless of the requested range as
8888
// Google Cloud Storage dictates.
8989
func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64) (r *Reader, err error) {
90-
ctx = trace.StartSpan(ctx, "cloud.google.com/go/storage.Object.NewRangeReader")
91-
defer func() { trace.EndSpan(ctx, err) }()
90+
// This span covers the life of the reader. It is closed via the context
91+
// in Reader.Close.
92+
ctx = trace.StartSpan(ctx, "cloud.google.com/go/storage.Object.Reader")
9293

9394
if err := o.validate(); err != nil {
9495
return nil, err
@@ -117,6 +118,14 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64)
117118

118119
r, err = o.c.tc.NewRangeReader(ctx, params, opts...)
119120

121+
// Pass the context so that the span can be closed in Reader.Close, or close the
122+
// span now if there is an error.
123+
if err == nil {
124+
r.ctx = ctx
125+
} else {
126+
trace.EndSpan(ctx, err)
127+
}
128+
120129
return r, err
121130
}
122131

@@ -204,11 +213,14 @@ type Reader struct {
204213
gotCRC uint32 // running crc
205214

206215
reader io.ReadCloser
216+
ctx context.Context
207217
}
208218

209219
// Close closes the Reader. It must be called when done reading.
210220
func (r *Reader) Close() error {
211-
return r.reader.Close()
221+
err := r.reader.Close()
222+
trace.EndSpan(r.ctx, err)
223+
return err
212224
}
213225

214226
func (r *Reader) Read(p []byte) (int, error) {

0 commit comments

Comments
 (0)