Skip to content

Commit df75674

Browse files
authored
Merge pull request #1541 from ydb-platform/fix-close
* Fixed closing of child driver with shared balancer
2 parents 6f56a5c + 3088199 commit df75674

File tree

8 files changed

+34
-8
lines changed

8 files changed

+34
-8
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* Fixed closing of child driver with shared balancer
2+
13
## v3.89.6
24
* Refactored `database/sql` driver internals for query-service client support in the future
35

driver.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ type (
109109
balancerWithMeta struct {
110110
balancer *balancer.Balancer
111111
meta *meta.Meta
112+
close func(ctx context.Context) error
112113
}
113114
)
114115

@@ -134,6 +135,10 @@ func (b *balancerWithMeta) NewStream(ctx context.Context, desc *grpc.StreamDesc,
134135
return b.balancer.NewStream(metaCtx, desc, method, opts...)
135136
}
136137

138+
func (b *balancerWithMeta) Close(ctx context.Context) error {
139+
return b.close(ctx)
140+
}
141+
137142
// Close closes Driver and clear resources
138143
//
139144
//nolint:nonamedreturns
@@ -176,7 +181,7 @@ func (d *Driver) Close(ctx context.Context) (finalErr error) {
176181
d.query.Close,
177182
d.topic.Close,
178183
d.discovery.Close,
179-
d.metaBalancer.balancer.Close,
184+
d.metaBalancer.Close,
180185
d.pool.Release,
181186
)
182187

@@ -278,7 +283,7 @@ func Open(ctx context.Context, dsn string, opts ...Option) (_ *Driver, _ error)
278283
}
279284
}
280285

281-
d, err := newConnectionFromOptions(ctx, opts...)
286+
d, err := driverFromOptions(ctx, opts...)
282287
if err != nil {
283288
return nil, xerrors.WithStackTrace(err)
284289
}
@@ -320,7 +325,7 @@ func MustOpen(ctx context.Context, dsn string, opts ...Option) *Driver {
320325
// Will be removed after Oct 2024.
321326
// Read about versioning policy: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#deprecated
322327
func New(ctx context.Context, opts ...Option) (_ *Driver, err error) { //nolint:nonamedreturns
323-
d, err := newConnectionFromOptions(ctx, opts...)
328+
d, err := driverFromOptions(ctx, opts...)
324329
if err != nil {
325330
return nil, xerrors.WithStackTrace(err)
326331
}
@@ -342,7 +347,7 @@ func New(ctx context.Context, opts ...Option) (_ *Driver, err error) { //nolint:
342347
}
343348

344349
//nolint:cyclop, nonamedreturns, funlen
345-
func newConnectionFromOptions(ctx context.Context, opts ...Option) (_ *Driver, err error) {
350+
func driverFromOptions(ctx context.Context, opts ...Option) (_ *Driver, err error) {
346351
ctx, driverCtxCancel := xcontext.WithCancel(xcontext.ValueOnly(ctx))
347352
defer func() {
348353
if err != nil {
@@ -444,6 +449,7 @@ func (d *Driver) connect(ctx context.Context) (err error) {
444449
return xerrors.WithStackTrace(err)
445450
}
446451
d.metaBalancer.balancer = b
452+
d.metaBalancer.close = b.Close
447453
}
448454
d.metaBalancer.meta = d.config.Meta()
449455

dsn_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func TestParse(t *testing.T) {
178178
require.ErrorIs(t, err, tt.err)
179179
} else {
180180
require.NoError(t, err)
181-
d, err := newConnectionFromOptions(context.Background(), opts...)
181+
d, err := driverFromOptions(context.Background(), opts...)
182182
require.NoError(t, err)
183183
exp := newConnector(tt.connectorOpts...)
184184
act := newConnector(d.databaseSQLOptions...)

options.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ func WithPanicCallback(panicCallback func(e interface{})) Option {
602602
func WithSharedBalancer(parent *Driver) Option {
603603
return func(ctx context.Context, d *Driver) error {
604604
d.metaBalancer.balancer = parent.metaBalancer.balancer
605+
d.metaBalancer.close = func(ctx context.Context) error { return nil }
605606

606607
return nil
607608
}

tests/integration/connection_test.go renamed to tests/integration/driver_test.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ import (
3232
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xtest"
3333
"github.com/ydb-platform/ydb-go-sdk/v3/log"
3434
"github.com/ydb-platform/ydb-go-sdk/v3/retry"
35+
"github.com/ydb-platform/ydb-go-sdk/v3/table/result/indexed"
3536
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
3637
)
3738

3839
//nolint:gocyclo
39-
func TestConnection(sourceTest *testing.T) {
40+
func TestDriver(sourceTest *testing.T) {
4041
t := xtest.MakeSyncedTest(sourceTest)
4142
const sumColumn = "sum"
4243
var (
@@ -164,6 +165,22 @@ func TestConnection(sourceTest *testing.T) {
164165
t.Fatalf("close failed: %+v", e)
165166
}
166167
}()
168+
t.Run("With", func(t *testing.T) {
169+
t.Run("WithSharedBalancer", func(t *testing.T) {
170+
child, err := db.With(ctx, ydb.WithSharedBalancer(db))
171+
require.NoError(t, err)
172+
result, err := child.Scripting().Execute(ctx, `SELECT 1`, nil)
173+
require.NoError(t, err)
174+
require.NoError(t, result.NextResultSetErr(ctx))
175+
require.True(t, result.NextRow())
176+
var value int32
177+
err = result.Scan(indexed.Required(&value))
178+
require.NoError(t, err)
179+
require.EqualValues(t, 1, value)
180+
err = child.Close(ctx)
181+
require.NoError(t, err)
182+
})
183+
})
167184
t.Run("discovery.WhoAmI", func(t *testing.T) {
168185
if err = retry.Retry(ctx, func(ctx context.Context) (err error) {
169186
discoveryClient := Ydb_Discovery_V1.NewDiscoveryServiceClient(ydb.GRPCConn(db))

with.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var nextID atomic.Uint64 //nolint:gochecknoglobals
1414
func (d *Driver) with(ctx context.Context, opts ...Option) (*Driver, uint64, error) {
1515
id := nextID.Add(1)
1616

17-
child, err := newConnectionFromOptions(
17+
child, err := driverFromOptions(
1818
ctx,
1919
append(
2020
append(

with_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func TestWithCertificatesCached(t *testing.T) {
128128
},
129129
} {
130130
t.Run(test.name, func(t *testing.T) {
131-
db, err := newConnectionFromOptions(ctx,
131+
db, err := driverFromOptions(ctx,
132132
append(
133133
test.options,
134134
withConnPool(conn.NewPool(context.Background(), config.New())), //nolint:contextcheck

0 commit comments

Comments
 (0)