ydb-platform / ydb-go-sdk

Pure Go native and database/sql driver for YDB
https://ydb.tech
Apache License 2.0
138 stars 73 forks source link

bug: Session leak on Table().Do() #1309

Open rekby opened 3 months ago

rekby commented 3 months ago

Bug Report

YDB GO SDK version: 3.74.7

Reproduced on local ydb.

Code:

Details ```go ctx := context.Background() db := must(ydb.Open( ctx, connectionString, yc.WithInternalCA(), ydb.WithAccessTokenCredentials(internalOAuthToken), // yc.WithServiceAccountKeyFileCredentials(serviсeAccountFile), // ydb.WithDiscoveryInterval(time.Second), ydb.WithLogger(log.Default(os.Stderr), trace.DetailsAll), )) for { readCtx, cancel := context.WithTimeout(ctx, time.Millisecond*10) _ = db.Table().Do(readCtx, func(ctx context.Context, s table.Session) error { _, res, err := s.Execute(ctx, table.SerializableReadWriteTxControl(table.CommitTx()), "SELECT 1", nil) if res != nil { res.Close() } switch { case err == nil: return nil case ydb.IsTransportError(err): return err case ctx.Err() != nil: return nil default: panic(err) } }) cancel() } ```

Session leaks can see on diagnostics page: http://localhost:8765/actors/kqp_proxy

Active session_actors count on node: 167