Skip to content

Commit 1a4515a

Browse files
committed
changed on router discovery trace
1 parent 0223fb3 commit 1a4515a

File tree

5 files changed

+98
-60
lines changed

5 files changed

+98
-60
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
* Implemented detection of local data-center with measuring tcp dial RTT
2+
* Added `trace.Driver.OnRouterDiscovery` event
23
* Simplified the balancing logic
34

45
## v3.25.3

internal/router/router.go

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,17 @@ import (
44
"context"
55
"fmt"
66
"sync"
7-
"time"
87

98
"google.golang.org/grpc"
109

11-
routerconfig "github.com/ydb-platform/ydb-go-sdk/v3/internal/router/config"
12-
1310
"github.com/ydb-platform/ydb-go-sdk/v3/config"
1411
"github.com/ydb-platform/ydb-go-sdk/v3/discovery"
1512
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
1613
discoveryBuilder "github.com/ydb-platform/ydb-go-sdk/v3/internal/discovery"
1714
discoveryConfig "github.com/ydb-platform/ydb-go-sdk/v3/internal/discovery/config"
1815
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint"
1916
"github.com/ydb-platform/ydb-go-sdk/v3/internal/repeater"
17+
routerconfig "github.com/ydb-platform/ydb-go-sdk/v3/internal/router/config"
2018
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
2119
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
2220
)
@@ -36,41 +34,42 @@ type router struct {
3634
}
3735

3836
func (r *router) clusterDiscovery(ctx context.Context) (err error) {
39-
var discoveryTrace trace.DriverRouterDiscoveryInfo
40-
start := time.Now()
41-
defer func() {
42-
discoveryTrace.Error = err
43-
discoveryTrace.Latency = time.Since(start)
44-
45-
trace.DriverOnRouterDiscovery(
37+
var (
38+
onDone = trace.DriverOnRouterDiscovery(
4639
r.driverConfig.Trace(),
47-
discoveryTrace.Latency,
48-
discoveryTrace.Endpoints,
40+
&ctx,
4941
r.routerConfig.DetectlocalDC,
50-
discoveryTrace.LocalDC,
42+
)
43+
endpoints []endpoint.Endpoint
44+
localDC string
45+
)
46+
47+
defer func() {
48+
nodes := make([]trace.EndpointInfo, 0, len(endpoints))
49+
for _, e := range endpoints {
50+
nodes = append(nodes, e.Copy())
51+
}
52+
onDone(
53+
nodes,
54+
localDC,
5155
err,
5256
)
5357
}()
5458

55-
endpoints, err := r.discovery.Discover(ctx)
59+
endpoints, err = r.discovery.Discover(ctx)
5660
if err != nil {
5761
return xerrors.WithStackTrace(err)
5862
}
59-
discoveryTrace.Endpoints = make([]trace.EndpointInfo, 0, len(endpoints))
60-
for _, e := range endpoints {
61-
discoveryTrace.Endpoints = append(discoveryTrace.Endpoints, e)
62-
}
6363

64-
var localDC string
6564
if r.routerConfig.DetectlocalDC {
6665
localDC, err = r.localDCDetector(ctx, endpoints)
6766
if err != nil {
68-
return err
67+
return xerrors.WithStackTrace(err)
6968
}
70-
discoveryTrace.LocalDC = localDC
7169
}
7270

7371
r.applyDiscoveredEndpoints(ctx, endpoints, localDC)
72+
7473
return nil
7574
}
7675

log/driver.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -419,24 +419,27 @@ func Driver(l Logger, details trace.Details) (t trace.Driver) {
419419
}
420420
}
421421

422-
t.OnRouterDiscovery = func(info trace.DriverRouterDiscoveryInfo) {
423-
if info.Error == nil {
424-
l.Tracef(
425-
`discovery new endpoints done {latency:"%v", endpoints: "%v", needLocalDC: "%v", detectedLocalDC: "%v"}`,
426-
info.Latency,
427-
info.Endpoints,
428-
info.NeedLocalDC,
429-
info.LocalDC,
430-
)
431-
} else {
432-
l.Errorf(
433-
`discovery new endpoints fail {latency:"%v", endpoints: "%v", needLocalDC: "%v", localDC: "%v", error: "%v"}`,
434-
info.Latency,
435-
info.Endpoints,
436-
info.NeedLocalDC,
437-
info.LocalDC,
438-
info.Error,
439-
)
422+
t.OnRouterDiscovery = func(info trace.DriverRouterDiscoveryStartInfo) func(trace.DriverRouterDiscoveryDoneInfo) {
423+
l.Tracef(
424+
`router discovery start {needLocalDC: "%v"}`,
425+
info.NeedLocalDC,
426+
)
427+
start := time.Now()
428+
return func(info trace.DriverRouterDiscoveryDoneInfo) {
429+
if info.Error == nil {
430+
l.Infof(
431+
`router discovery done {latency:"%v", endpoints: "%v", detectedLocalDC: "%v"}`,
432+
time.Since(start),
433+
info.Endpoints,
434+
info.LocalDC,
435+
)
436+
} else {
437+
l.Errorf(
438+
`router discovery failed {latency:"%v", error: "%v"}`,
439+
time.Since(start),
440+
info.Error,
441+
)
442+
}
440443
}
441444
}
442445
}

trace/driver.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@ type (
7171
OnUnpessimizeNode func(DriverUnpessimizeNodeStartInfo) func(DriverUnpessimizeNodeDoneInfo)
7272

7373
// Repeater events
74-
OnRepeaterWakeUp func(DriverRepeaterWakeUpStartInfo) func(DriverRepeaterWakeUpDoneInfo)
75-
OnRouterDiscovery func(DriverRouterDiscoveryInfo)
74+
OnRepeaterWakeUp func(DriverRepeaterWakeUpStartInfo) func(DriverRepeaterWakeUpDoneInfo)
75+
76+
// Router events
77+
OnRouterDiscovery func(DriverRouterDiscoveryStartInfo) func(DriverRouterDiscoveryDoneInfo)
7678

7779
// Credentials events
7880
OnGetCredentials func(DriverGetCredentialsStartInfo) func(DriverGetCredentialsDoneInfo)
@@ -171,12 +173,18 @@ type (
171173
DriverResolveDoneInfo struct {
172174
Error error
173175
}
174-
DriverRouterDiscoveryInfo struct {
175-
Latency time.Duration
176-
Endpoints []EndpointInfo
176+
DriverRouterDiscoveryStartInfo struct {
177+
// Context make available context in trace callback function.
178+
// Pointer to context provide replacement of context in trace callback function.
179+
// Warning: concurrent access to pointer on client side must be excluded.
180+
// Safe replacement of context are provided only inside callback function
181+
Context *context.Context
177182
NeedLocalDC bool
178-
LocalDC string
179-
Error error
183+
}
184+
DriverRouterDiscoveryDoneInfo struct {
185+
Endpoints []EndpointInfo
186+
LocalDC string
187+
Error error
180188
}
181189
DriverNetReadStartInfo struct {
182190
Address string

trace/driver_gtrace.go

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

0 commit comments

Comments
 (0)