Skip to content

Commit() function can not distinguish whether the transaction has been sent #1226

Open
@syuanyuan708

Description

@syuanyuan708

Issue description

when I call func (tx *mysqlTx) Commit() (err error) ,if connection has problem it return an ErrInvalidConn

commit

but if current connection is fine it call exec

exec

and in exec it call readResultSetHeaderPacket after the transaction sent to db successfully, and readResultSetHeaderPacket call readPacket() and it also may lead to ErrInvalidConn

readpackets

thus I can't distinguish whether the transaction has been sent, it lead to one transaction sent twice and data not correct. Is it possible to add a new error to distinguish this two cases?

Example code

If possible, please enter some example code here to reproduce the issue.

err = tx.Commit(ctx)
if err != nil {
xlog.Errorf(ctx, "%s commit transaction failed, table:%v err:%v", fun, table, err) ...

Error log

***err:invalid connection 

Configuration

Driver version (or git SHA):

*Go version: go1.12 linux/amd64

*Server version: tidb

*Server OS: redhat7.2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions