Skip to content

Commit e88f614

Browse files
authored
Merge pull request #1540 from ydb-platform/fix-meta-balancer-init
Fix nil pointer dereference in meta balancer initialization
2 parents 4b5575b + f5262d1 commit e88f614

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* Fixed nil pointer dereference in metabalancer initialization
2+
13
## v3.89.4
24
* Changed behaviour on re-discovery: always open new grpc connection for discovery request
35

driver.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,9 @@ func newConnectionFromOptions(ctx context.Context, opts ...Option) (_ *Driver, e
351351
}()
352352

353353
d := &Driver{
354-
children: make(map[uint64]*Driver),
355-
ctxCancel: driverCtxCancel,
354+
children: make(map[uint64]*Driver),
355+
ctxCancel: driverCtxCancel,
356+
metaBalancer: &balancerWithMeta{},
356357
}
357358

358359
if caFile, has := os.LookupEnv("YDB_SSL_ROOT_CERTIFICATES_FILE"); has {
@@ -436,13 +437,15 @@ func (d *Driver) connect(ctx context.Context) (err error) {
436437
if d.pool == nil {
437438
d.pool = conn.NewPool(ctx, d.config)
438439
}
439-
if d.metaBalancer == nil {
440+
441+
if d.metaBalancer.balancer == nil {
440442
b, err := balancer.New(ctx, d.config, d.pool, d.discoveryOptions...)
441443
if err != nil {
442444
return xerrors.WithStackTrace(err)
443445
}
444-
d.metaBalancer = &balancerWithMeta{balancer: b, meta: d.config.Meta()}
446+
d.metaBalancer.balancer = b
445447
}
448+
d.metaBalancer.meta = d.config.Meta()
446449

447450
d.table = xsync.OnceValue(func() (*internalTable.Client, error) {
448451
return internalTable.New(xcontext.ValueOnly(ctx),

options.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ func WithPanicCallback(panicCallback func(e interface{})) Option {
601601
// WithSharedBalancer sets balancer from parent driver to child driver
602602
func WithSharedBalancer(parent *Driver) Option {
603603
return func(ctx context.Context, d *Driver) error {
604-
d.metaBalancer = &balancerWithMeta{balancer: parent.metaBalancer.balancer, meta: d.config.Meta()}
604+
d.metaBalancer.balancer = parent.metaBalancer.balancer
605605

606606
return nil
607607
}

0 commit comments

Comments
 (0)