ydb-platform / ydb-go-sdk

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

bug: BAD_SESSION errors in query service #1287

Closed neyguvj closed 3 weeks ago

neyguvj commented 3 weeks ago

Bug Report

3.74.0

Ubuntu x64

current behaviour: Sometimes driver deletes session, because this connection check fails. And then we get error, because session was deleted.

'ydb.query.session.execute' => failed {"latency":"1.518718ms","error":"connError{node_id:0,address:'localhost:12136'}: operation/BAD_SESSION (code = 400100, address = localhost:12136, issues = [{'Session not found: ydb://session/3?node_id=1&id=NGEyNWNiNWMtZTE0MzQyMGYtODY2ODQ3YWMtMTg5OGE0YmQ='}]) at `github.com/ydb-platform/ydb-go-sdk/v3/internal/conn.(*grpcClientStream).RecvMsg(grpc_client_stream.go:178)` at `github.com/ydb-platform/ydb-go-sdk/v3/internal/query.nextPart(result.go:143)` at `github.com/ydb-platform/ydb-go-sdk/v3/internal/query.newResult(result.go:101)` at `github.com/ydb-platform/ydb-go-sdk/v3/internal/query.execute(execute_query.go:74)` at `github.com/ydb-platform/ydb-go-sdk/v3/internal/query.(*Session).Execute(session.go:327)`","version":"3.74.0"}

Expected behaviour:

Query executed correctly.

Steps to reproduce:

func (s *ydbTestSuite) TestQueryReadRow() {
    ctx, cancel := s.context()
    defer cancel()

    expectedValue := 1
    var actualValue int

    err := s.Query().Do(ctx, func(ctx context.Context, session query.Session) error {
        row, err := session.ReadRow(ctx, "SELECT 1 AS value", query.WithStatsMode(query.StatsModeBasic))
        if err != nil {
            return err
        }
        if err = row.Scan(&actualValue); err != nil && !errors.Is(err, io.EOF) {
            return err
        }

        return nil
    })
    s.Require().NoError(err)
    s.Require().Equal(expectedValue, actualValue)
}

Other information: