Skip to content

Commit a1ada4d

Browse files
authored
Merge pull request #349 from ydb-platform/metadata
added metadata to `trace.Driver.OnInvoke` and `trace.Driver.OnNewStre…
2 parents 5333d3e + ff25475 commit a1ada4d

File tree

6 files changed

+33
-22
lines changed

6 files changed

+33
-22
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
* Changed `database/sql` driver `prepare` behaviour to `nop` with proxing call to conn exec/query with keep-in-cache flag
1+
* Changed `database/sql` driver `prepare` behaviour to `nop` with proxing call to conn exec/query with keep-in-cache flag
2+
* Added metadata to `trace.Driver.OnInvoke` and `trace.Driver.OnNewStream` done events
23

34
## v3.34.0
45
* Improved the `xsql` errors mapping to `driver.ErrBadConn`

internal/conn/conn.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb"
1111
"google.golang.org/grpc"
1212
"google.golang.org/grpc/connectivity"
13+
"google.golang.org/grpc/metadata"
1314
"google.golang.org/grpc/stats"
1415

1516
"github.com/ydb-platform/ydb-go-sdk/v3/internal/backoff"
@@ -305,10 +306,11 @@ func (c *conn) Invoke(
305306
trace.Method(method),
306307
)
307308
cc *grpc.ClientConn
309+
md = metadata.MD{}
308310
)
309311

310312
defer func() {
311-
onDone(err, issues, opID, c.GetState())
313+
onDone(err, issues, opID, c.GetState(), md)
312314
}()
313315

314316
cc, err = c.take(ctx)
@@ -321,7 +323,7 @@ func (c *conn) Invoke(
321323

322324
ctx, sentMark := markContext(ctx)
323325

324-
err = cc.Invoke(ctx, method, req, res, opts...)
326+
err = cc.Invoke(ctx, method, req, res, append(opts, grpc.Trailer(&md))...)
325327
if err != nil {
326328
if wrapping {
327329
err = xerrors.FromGRPCError(err,
@@ -386,7 +388,7 @@ func (c *conn) NewStream(
386388

387389
defer func() {
388390
if err != nil {
389-
streamRecv(err)(c.GetState(), err)
391+
streamRecv(err)(err, c.GetState(), metadata.MD{})
390392
}
391393
}()
392394

internal/conn/grpc_client_stream.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type grpcClientStream struct {
2121
wrapping bool
2222
sentMark *modificationMark
2323
onDone func(ctx context.Context)
24-
recv func(error) func(trace.ConnState, error)
24+
recv func(error) func(error, trace.ConnState, map[string][]string)
2525
}
2626

2727
func (s *grpcClientStream) CloseSend() (err error) {
@@ -77,7 +77,7 @@ func (s *grpcClientStream) RecvMsg(m interface{}) (err error) {
7777
defer func() {
7878
onDone := s.recv(xerrors.HideEOF(err))
7979
if err != nil {
80-
onDone(s.c.GetState(), xerrors.HideEOF(err))
80+
onDone(xerrors.HideEOF(err), s.c.GetState(), s.ClientStream.Trailer())
8181
s.onDone(s.ClientStream.Context())
8282
}
8383
}()

log/driver.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,17 +289,19 @@ func Driver(l Logger, details trace.Details) (t trace.Driver) {
289289
start := time.Now()
290290
return func(info trace.DriverConnInvokeDoneInfo) {
291291
if info.Error == nil {
292-
l.Tracef(`invoke done {endpoint:%v,method:"%s",latency:"%v"}`,
292+
l.Tracef(`invoke done {endpoint:%v,method:"%s",latency:"%v",,metadata:%v}`,
293293
endpoint,
294294
method,
295295
time.Since(start),
296+
info.Metadata,
296297
)
297298
} else {
298-
l.Warnf(`invoke failed {endpoint:%v,method:"%s",latency:"%v",error:"%s",version:"%s"}`,
299+
l.Warnf(`invoke failed {endpoint:%v,method:"%s",latency:"%v",error:"%s",,metadata:%v,version:"%s"}`,
299300
endpoint,
300301
method,
301302
time.Since(start),
302303
info.Error,
304+
info.Metadata,
303305
meta.Version,
304306
)
305307
}
@@ -337,17 +339,19 @@ func Driver(l Logger, details trace.Details) (t trace.Driver) {
337339
}
338340
return func(info trace.DriverConnNewStreamDoneInfo) {
339341
if info.Error == nil {
340-
l.Tracef(`streaming done {endpoint:%v,method:"%s",latency:"%v"}`,
342+
l.Tracef(`streaming done {endpoint:%v,method:"%s",latency:"%v",metadata:%v}`,
341343
endpoint,
342344
method,
343345
time.Since(start),
346+
info.Metadata,
344347
)
345348
} else {
346-
l.Warnf(`streaming done {endpoint:%v,method:"%s",latency:"%v",error:"%s",version:"%s"}`,
349+
l.Warnf(`streaming done {endpoint:%v,method:"%s",latency:"%v",error:"%s",,metadata:%v,version:"%s"}`,
347350
endpoint,
348351
method,
349352
time.Since(start),
350353
info.Error,
354+
info.Metadata,
351355
meta.Version,
352356
)
353357
}

trace/driver.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,11 @@ type (
236236
Method Method
237237
}
238238
DriverConnInvokeDoneInfo struct {
239-
Error error
240-
Issues []Issue
241-
OpID string
242-
State ConnState
239+
Error error
240+
Issues []Issue
241+
OpID string
242+
State ConnState
243+
Metadata map[string][]string
243244
}
244245
DriverConnNewStreamStartInfo struct {
245246
// Context make available context in trace callback function.
@@ -254,8 +255,9 @@ type (
254255
Error error
255256
}
256257
DriverConnNewStreamDoneInfo struct {
257-
State ConnState
258-
Error error
258+
Error error
259+
State ConnState
260+
Metadata map[string][]string
259261
}
260262
DriverBalancerInitStartInfo struct {
261263
// Context make available context in trace callback function.

trace/driver_gtrace.go

Lines changed: 8 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)