Skip to content

Commit 654ff6e

Browse files
authored
Merge pull request #117 from ydb-platform/traces
v3.10.0: Add trace stubs for discovery, scheme, scripting, coordiantion, ratelimiter clients + add options for define traces for specified client
2 parents 82ac8be + 082d6c2 commit 654ff6e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+2183
-784
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
## 3.10.0
2+
* Extended `trace.Details` constants for support per-service events
3+
* Added `trace.Discovery` struct for traces discovery events
4+
* Added `trace.Ratelimiter`, `trace.Coordination`, `trace.Scripting`, `trace.Scheme` stubs (will be implements in the future)
5+
* Added `ratelimiter/config`, `coordination/config`, `scripting/config`, `scheme/config`, `discovery/config` packages for specify per-service configs
6+
* Removed `trace.Driver.OnDiscovery` callback (moved to `trace.Discovery`)
7+
* Refactored initialization step (firstly makes discovery client)
8+
* Removed `internal/lazy.Discovery` (discovery client always initialized)
9+
* Fixed `trace.Table` event structs
10+
* Refactored grpc options for define dns-balancing configuration
11+
* Refactored `retry.Retry` signature (added `retry.WithID`, `retry.WithTrace` and `retry.WithIdempotent` opt-in args, required param `isIdempotentOperation` removed)
12+
* Refactored package `internal/repeater`
13+
114
## 3.9.4
215
* Fixed data race on closing session pool
316

config/config.go

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ import (
1414
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
1515
)
1616

17-
const (
18-
DefaultDiscoveryInterval = time.Minute
19-
)
20-
2117
// Config contains driver configuration options.
2218
type Config interface {
2319
// Endpoint is a required starting endpoint for connect
@@ -60,12 +56,6 @@ type Config interface {
6056
// If OperationCancelAfter is zero then no timeout is used.
6157
OperationCancelAfter() time.Duration
6258

63-
// DiscoveryInterval is the frequency of background tasks of ydb endpoints
64-
// discovery.
65-
// If DiscoveryInterval is zero then the DefaultDiscoveryInterval is used.
66-
// If DiscoveryInterval is negative, then no background discovery prepared.
67-
DiscoveryInterval() time.Duration
68-
6959
// Balancer is an optional configuration related to selected balancer.
7060
// That is, some balancing methods allow to be configured.
7161
Balancer() balancer.Balancer
@@ -102,7 +92,6 @@ type config struct {
10292
streamTimeout time.Duration
10393
operationTimeout time.Duration
10494
operationCancelAfter time.Duration
105-
discoveryInterval time.Duration
10695
dialTimeout time.Duration
10796
connectionTTL time.Duration
10897
balancer balancer.Balancer
@@ -169,10 +158,6 @@ func (c *config) OperationCancelAfter() time.Duration {
169158
return c.operationCancelAfter
170159
}
171160

172-
func (c *config) DiscoveryInterval() time.Duration {
173-
return c.discoveryInterval
174-
}
175-
176161
func (c *config) Balancer() balancer.Balancer {
177162
return c.balancer
178163
}
@@ -255,16 +240,6 @@ func WithOperationCancelAfter(operationCancelAfter time.Duration) Option {
255240
}
256241
}
257242

258-
func WithDiscoveryInterval(discoveryInterval time.Duration) Option {
259-
return func(c *config) {
260-
if discoveryInterval <= 0 {
261-
c.discoveryInterval = 0
262-
} else {
263-
c.discoveryInterval = discoveryInterval
264-
}
265-
}
266-
}
267-
268243
func WithDialTimeout(timeout time.Duration) Option {
269244
return func(c *config) {
270245
c.dialTimeout = timeout
@@ -303,9 +278,6 @@ func New(opts ...Option) Config {
303278
if !c.secure {
304279
c.tlsConfig = nil
305280
}
306-
if c.discoveryInterval == 0 {
307-
c.balancer = balancers.SingleConn()
308-
}
309281
c.meta = meta.New(
310282
c.database,
311283
c.credentials,
@@ -333,9 +305,8 @@ func certPool() (certPool *x509.CertPool) {
333305

334306
func defaultConfig() (c *config) {
335307
return &config{
336-
discoveryInterval: DefaultDiscoveryInterval,
337-
balancer: balancers.Default(),
338-
secure: true,
308+
balancer: balancers.Default(),
309+
secure: true,
339310
tlsConfig: &tls.Config{
340311
MinVersion: tls.VersionTLS12,
341312
RootCAs: certPool(),

config/grpc_dial_options.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@ func (c *config) GrpcDialOptions() (opts []grpc.DialOption) {
2121
}),
2222
grpc.WithKeepaliveParams(DefaultGrpcConnectionPolicy),
2323
grpc.WithResolvers(
24-
resolver.New(""), // for use this resolver by default
25-
resolver.New("grpc"),
26-
resolver.New("grpcs"),
24+
resolver.New("ydb"),
2725
),
28-
grpc.WithDefaultServiceConfig(`{"loadBalancingConfig": [{"round_robin":{}}]}`),
26+
grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin"}`),
2927
grpc.WithDefaultCallOptions(
3028
grpc.MaxCallRecvMsgSize(DefaultGRPCMsgSize),
3129
grpc.MaxCallSendMsgSize(DefaultGRPCMsgSize),

connection.go

Lines changed: 73 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,23 @@ import (
99

1010
"github.com/ydb-platform/ydb-go-sdk/v3/config"
1111
"github.com/ydb-platform/ydb-go-sdk/v3/coordination"
12+
coordinationConfig "github.com/ydb-platform/ydb-go-sdk/v3/coordination/config"
1213
"github.com/ydb-platform/ydb-go-sdk/v3/discovery"
13-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
14+
discoveryConfig "github.com/ydb-platform/ydb-go-sdk/v3/discovery/config"
15+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer/single"
16+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/closer"
1417
"github.com/ydb-platform/ydb-go-sdk/v3/internal/db"
1518
"github.com/ydb-platform/ydb-go-sdk/v3/internal/errors"
1619
"github.com/ydb-platform/ydb-go-sdk/v3/internal/lazy"
1720
"github.com/ydb-platform/ydb-go-sdk/v3/internal/logger"
1821
"github.com/ydb-platform/ydb-go-sdk/v3/internal/meta"
1922
"github.com/ydb-platform/ydb-go-sdk/v3/internal/proxy"
20-
"github.com/ydb-platform/ydb-go-sdk/v3/log"
2123
"github.com/ydb-platform/ydb-go-sdk/v3/ratelimiter"
24+
ratelimiterConfig "github.com/ydb-platform/ydb-go-sdk/v3/ratelimiter/config"
2225
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
26+
schemeConfig "github.com/ydb-platform/ydb-go-sdk/v3/scheme/config"
2327
"github.com/ydb-platform/ydb-go-sdk/v3/scripting"
28+
scriptingConfig "github.com/ydb-platform/ydb-go-sdk/v3/scripting/config"
2429
"github.com/ydb-platform/ydb-go-sdk/v3/table"
2530
tableConfig "github.com/ydb-platform/ydb-go-sdk/v3/table/config"
2631
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
@@ -29,7 +34,8 @@ import (
2934
// Connection interface provide access to YDB service clients
3035
// Interface and list of clients may be changed in the future
3136
type Connection interface {
32-
db.Connection
37+
closer.Closer
38+
db.ConnectionInfo
3339

3440
// Table returns table client with options from Connection instance.
3541
// Options provide options replacement for requested table client
@@ -63,30 +69,35 @@ type Connection interface {
6369
}
6470

6571
type connection struct {
66-
config config.Config
67-
options []config.Option
68-
tableOptions []tableConfig.Option
69-
scripting scripting.Client
72+
config config.Config
73+
options []config.Option
7074

7175
table table.Client
72-
scheme scheme.Client
73-
discovery discovery.Client
74-
coordination coordination.Client
75-
rateLimiter ratelimiter.Client
76+
tableOptions []tableConfig.Option
77+
78+
scripting scripting.Client
79+
scriptingOptions []scriptingConfig.Option
80+
81+
scheme scheme.Client
82+
schemeOptions []schemeConfig.Option
83+
84+
discoveryOptions []discoveryConfig.Option
85+
86+
coordination coordination.Client
87+
coordinationOptions []coordinationConfig.Option
7688

77-
conns conn.Pool
78-
mtx sync.Mutex
79-
db db.Connection
89+
ratelimiter ratelimiter.Client
90+
ratelimiterOptions []ratelimiterConfig.Option
91+
92+
mtx sync.Mutex
93+
db db.Connection
8094
}
8195

8296
func (c *connection) Close(ctx context.Context) error {
8397
c.mtx.Lock()
8498
defer c.mtx.Unlock()
8599
var issues []error
86-
if err := c.discovery.Close(ctx); err != nil {
87-
issues = append(issues, err)
88-
}
89-
if err := c.rateLimiter.Close(ctx); err != nil {
100+
if err := c.ratelimiter.Close(ctx); err != nil {
90101
issues = append(issues, err)
91102
}
92103
if err := c.coordination.Close(ctx); err != nil {
@@ -104,9 +115,6 @@ func (c *connection) Close(ctx context.Context) error {
104115
if err := c.db.Close(ctx); err != nil {
105116
issues = append(issues, err)
106117
}
107-
if err := c.conns.Close(ctx); err != nil {
108-
issues = append(issues, err)
109-
}
110118
if len(issues) > 0 {
111119
return errors.NewWithIssues("close failed", issues...)
112120
}
@@ -167,16 +175,16 @@ func (c *connection) Coordination(opts ...CustomOption) coordination.Client {
167175

168176
func (c *connection) Ratelimiter(opts ...CustomOption) ratelimiter.Client {
169177
if len(opts) == 0 {
170-
return c.rateLimiter
178+
return c.ratelimiter
171179
}
172-
return proxy.Ratelimiter(c.rateLimiter, c.meta(opts...))
180+
return proxy.Ratelimiter(c.ratelimiter, c.meta(opts...))
173181
}
174182

175183
func (c *connection) Discovery(opts ...CustomOption) discovery.Client {
176184
if len(opts) == 0 {
177-
return c.discovery
185+
return c.db.Discovery()
178186
}
179-
return proxy.Discovery(c.discovery, c.meta(opts...))
187+
return proxy.Discovery(c.db.Discovery(), c.meta(opts...))
180188
}
181189

182190
func (c *connection) Scripting(opts ...CustomOption) scripting.Client {
@@ -205,17 +213,14 @@ func New(ctx context.Context, opts ...Option) (_ Connection, err error) {
205213
}
206214
if logLevel, has := os.LookupEnv("YDB_LOG_SEVERITY_LEVEL"); has {
207215
if l := logger.FromString(logLevel); l < logger.QUIET {
208-
logger := logger.New(
209-
logger.WithNamespace("ydb"),
210-
logger.WithMinLevel(logger.FromString(logLevel)),
211-
logger.WithNoColor(os.Getenv("YDB_LOG_NO_COLOR") != ""),
212-
)
213216
opts = append(
214-
[]Option{
215-
WithTraceDriver(log.Driver(logger, trace.DetailsAll)),
216-
WithTraceTable(log.Table(logger, trace.DetailsAll)),
217-
},
218-
opts...,
217+
opts,
218+
WithLogger(
219+
trace.DetailsAll,
220+
WithNamespace("ydb"),
221+
WithMinLevel(Level(logger.FromString(logLevel))),
222+
WithNoColor(os.Getenv("YDB_LOG_NO_COLOR") != ""),
223+
),
219224
)
220225
}
221226
}
@@ -226,16 +231,42 @@ func New(ctx context.Context, opts ...Option) (_ Connection, err error) {
226231
}
227232
}
228233
c.config = config.New(c.options...)
229-
c.conns = conn.NewPool(ctx, c.config)
230-
c.db, err = db.New(ctx, c.config, c.conns)
234+
if c.config.Endpoint() == "" {
235+
panic("empty dial address")
236+
}
237+
if c.config.Database() == "" {
238+
panic("empty database")
239+
}
240+
241+
if single.IsSingle(c.config.Balancer()) {
242+
c.discoveryOptions = append(c.discoveryOptions, discoveryConfig.WithInterval(0))
243+
}
244+
245+
c.db, err = db.New(
246+
ctx,
247+
c.config,
248+
append(
249+
[]discoveryConfig.Option{
250+
discoveryConfig.WithEndpoint(c.Endpoint()),
251+
discoveryConfig.WithDatabase(c.Name()),
252+
discoveryConfig.WithSecure(c.Secure()),
253+
},
254+
c.discoveryOptions...,
255+
)...,
256+
)
231257
if err != nil {
232258
return nil, err
233259
}
260+
234261
c.table = lazy.Table(c.db, c.tableOptions)
235-
c.scheme = lazy.Scheme(c.db)
236-
c.scripting = lazy.Scripting(c.db)
237-
c.discovery = lazy.Discovery(c.db, c.config.Trace())
238-
c.coordination = lazy.Coordination(c.db)
239-
c.rateLimiter = lazy.Ratelimiter(c.db)
262+
263+
c.scheme = lazy.Scheme(c.db, c.schemeOptions)
264+
265+
c.scripting = lazy.Scripting(c.db, c.scriptingOptions)
266+
267+
c.coordination = lazy.Coordination(c.db, c.coordinationOptions)
268+
269+
c.ratelimiter = lazy.Ratelimiter(c.db, c.ratelimiterOptions)
270+
240271
return c, nil
241272
}

coordination/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func (t RatelimiterCountersMode) String() string {
5151
}
5252
}
5353

54-
type Config struct {
54+
type NodeConfig struct {
5555
Path string
5656
SelfCheckPeriodMillis uint32
5757
SessionGracePeriodMillis uint32

coordination/config/config.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package config
2+
3+
import (
4+
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
5+
)
6+
7+
type Config interface {
8+
Trace() trace.Coordination
9+
}
10+
11+
type config struct {
12+
trace trace.Coordination
13+
}
14+
15+
func (c *config) Trace() trace.Coordination {
16+
return c.trace
17+
}
18+
19+
type Option func(c *config)
20+
21+
func WithTrace(trace trace.Coordination) Option {
22+
return func(c *config) {
23+
c.trace = trace
24+
}
25+
}
26+
27+
func New(opts ...Option) Config {
28+
c := &config{}
29+
for _, o := range opts {
30+
o(c)
31+
}
32+
return c
33+
}

coordination/coordination.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010
type Client interface {
1111
closer.Closer
1212

13-
CreateNode(ctx context.Context, path string, config Config) (err error)
14-
AlterNode(ctx context.Context, path string, config Config) (err error)
13+
CreateNode(ctx context.Context, path string, config NodeConfig) (err error)
14+
AlterNode(ctx context.Context, path string, config NodeConfig) (err error)
1515
DropNode(ctx context.Context, path string) (err error)
16-
DescribeNode(ctx context.Context, path string) (_ *scheme.Entry, _ *Config, err error)
16+
DescribeNode(ctx context.Context, path string) (_ *scheme.Entry, _ *NodeConfig, err error)
1717
}

0 commit comments

Comments
 (0)