Skip to content

Commit c0e1abe

Browse files
committed
add regression test
1 parent d5c65a4 commit c0e1abe

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* Fixed drop session from pool unnecessary in query service
2+
13
## v3.95.6
24
* Fixed panic on span reporting in `xsql/Tx`
35

internal/query/session.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func (s *Session) QueryResultSet(
3939

4040
r, err := execute(ctx, s.ID(), s.client, q, options.ExecuteSettings(opts...), withTrace(s.trace))
4141
if err != nil {
42-
s.handleSessionErrorStatus(err)
42+
s.setStatusFromError(err)
4343

4444
return nil, xerrors.WithStackTrace(err)
4545
}
@@ -57,7 +57,7 @@ func (s *Session) queryRow(
5757
) (row query.Row, finalErr error) {
5858
r, err := execute(ctx, s.ID(), s.client, q, settings, resultOpts...)
5959
if err != nil {
60-
s.handleSessionErrorStatus(err)
60+
s.setStatusFromError(err)
6161

6262
return nil, xerrors.WithStackTrace(err)
6363
}
@@ -125,7 +125,7 @@ func (s *Session) Begin(
125125

126126
txID, err := begin(ctx, s.client, s.ID(), txSettings)
127127
if err != nil {
128-
s.handleSessionErrorStatus(err)
128+
s.setStatusFromError(err)
129129

130130
return nil, xerrors.WithStackTrace(err)
131131
}
@@ -147,7 +147,7 @@ func (s *Session) Exec(
147147

148148
r, err := execute(ctx, s.ID(), s.client, q, options.ExecuteSettings(opts...), withTrace(s.trace))
149149
if err != nil {
150-
s.handleSessionErrorStatus(err)
150+
s.setStatusFromError(err)
151151

152152
return xerrors.WithStackTrace(err)
153153
}
@@ -171,17 +171,18 @@ func (s *Session) Query(
171171

172172
r, err := execute(ctx, s.ID(), s.client, q, options.ExecuteSettings(opts...), withTrace(s.trace))
173173
if err != nil {
174-
s.handleSessionErrorStatus(err)
174+
s.setStatusFromError(err)
175175

176176
return nil, xerrors.WithStackTrace(err)
177177
}
178178

179179
return r, nil
180180
}
181181

182-
func (s *Session) handleSessionErrorStatus(err error) {
182+
func (s *Session) setStatusFromError(err error) {
183183
switch {
184-
case xerrors.IsTransportError(err) || xerrors.IsOperationError(err, Ydb.StatusIds_SESSION_BUSY, Ydb.StatusIds_BAD_SESSION):
184+
case xerrors.IsTransportError(err) ||
185+
xerrors.IsOperationError(err, Ydb.StatusIds_SESSION_BUSY, Ydb.StatusIds_BAD_SESSION):
185186
s.SetStatus(session.StatusError)
186187
case xerrors.IsOperationError(err, Ydb.StatusIds_BAD_SESSION):
187188
s.SetStatus(session.StatusClosed)

internal/query/transaction.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,8 @@ func (tx *Transaction) CommitTx(ctx context.Context) (finalErr error) {
336336

337337
err = commitTx(ctx, tx.s.client, tx.s.ID(), tx.ID())
338338
if err != nil {
339-
tx.s.handleSessionErrorStatus(err)
339+
tx.s.setStatusFromError(err)
340+
340341
return xerrors.WithStackTrace(err)
341342
}
342343

@@ -371,7 +372,7 @@ func (tx *Transaction) Rollback(ctx context.Context) (finalErr error) {
371372

372373
err := rollback(ctx, tx.s.client, tx.s.ID(), tx.ID())
373374
if err != nil {
374-
tx.s.handleSessionErrorStatus(err)
375+
tx.s.setStatusFromError(err)
375376

376377
return xerrors.WithStackTrace(err)
377378
}

tests/integration/query_regression_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,3 +376,22 @@ func TestReadTwoPartsIntoMemoryIssue1559(t *testing.T) {
376376
require.Equal(t, targetCount, len(rows))
377377
require.Greater(t, partReaded, 1)
378378
}
379+
380+
// https://github.com/ydb-platform/ydb-go-sdk/issues/1607
381+
func TestCloseSessionOnCustomerErrorsIssue1607(t *testing.T) {
382+
scope := newScope(t)
383+
384+
sessionID1 := ""
385+
_ = scope.Driver().Query().Do(scope.Ctx, func(ctx context.Context, s query.Session) error {
386+
sessionID1 = s.ID()
387+
return errors.New("test")
388+
})
389+
390+
sessionID2 := ""
391+
_ = scope.Driver().Query().Do(scope.Ctx, func(ctx context.Context, s query.Session) error {
392+
sessionID2 = s.ID()
393+
return nil
394+
})
395+
396+
scope.Require.Equal(sessionID1, sessionID2)
397+
}

0 commit comments

Comments
 (0)