@@ -8,10 +8,24 @@ import (
88 "sync/atomic"
99
1010 "github.com/ydb-platform/ydb-go-sdk/v3/internal/kv"
11+ "github.com/ydb-platform/ydb-go-sdk/v3/internal/xstring"
1112 "github.com/ydb-platform/ydb-go-sdk/v3/meta"
1213 "github.com/ydb-platform/ydb-go-sdk/v3/trace"
1314)
1415
16+ func traceparent (traceID string , spanID string ) string {
17+ b := xstring .Buffer ()
18+ defer b .Free ()
19+
20+ b .WriteString ("00-" )
21+ b .WriteString (traceID )
22+ b .WriteByte ('-' )
23+ b .WriteString (spanID )
24+ b .WriteString ("-0" )
25+
26+ return b .String ()
27+ }
28+
1529// driver makes driver with publishing traces
1630func driver (adapter Adapter ) trace.Driver { //nolint:gocyclo,funlen
1731 return trace.Driver {
@@ -56,9 +70,7 @@ func driver(adapter Adapter) trace.Driver { //nolint:gocyclo,funlen
5670 if adapter .Details ()& trace .DriverConnEvents == 0 {
5771 return nil
5872 }
59- if traceID , valid := adapter .SpanFromContext (* info .Context ).TraceID (); valid {
60- * info .Context = meta .WithTraceParent (* info .Context , traceID )
61- }
73+
6274 start := childSpanWithReplaceCtx (
6375 adapter ,
6476 info .Context ,
@@ -67,6 +79,12 @@ func driver(adapter Adapter) trace.Driver { //nolint:gocyclo,funlen
6779 kv .String ("method" , string (info .Method )),
6880 )
6981
82+ if id , valid := start .ID (); valid {
83+ if traceID , valid := start .TraceID (); valid {
84+ * info .Context = meta .WithTraceParent (* info .Context , traceparent (traceID , id ))
85+ }
86+ }
87+
7088 return func (info trace.DriverConnInvokeDoneInfo ) {
7189 fields := []KeyValue {
7290 kv .String ("opID" , info .OpID ),
@@ -101,8 +119,10 @@ func driver(adapter Adapter) trace.Driver { //nolint:gocyclo,funlen
101119 kv .String ("method" , string (info .Method )),
102120 )
103121
104- if traceID , valid := start .TraceID (); valid {
105- * info .Context = meta .WithTraceParent (* info .Context , traceID )
122+ if id , valid := start .ID (); valid {
123+ if traceID , valid := start .TraceID (); valid {
124+ * info .Context = meta .WithTraceParent (* info .Context , traceparent (traceID , id ))
125+ }
106126 }
107127
108128 return func (info trace.DriverConnNewStreamDoneInfo ) {
0 commit comments