-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Commit() function can not distinguish whether the transaction has been sent #1226
Comments
it happend in my project when db connection is instable and an item in db is updated twice, does anyone encountered similar situations please? |
Use newer go version (Go 1.13 ) and try again. |
@syuanyuan708 err := tx.Commit()
if err != nil {
tx.Rollback()
return
} |
@zihengCat |
@zihengCat After reading the code and debugging, I found that after successfully sending "Commit" message to server and failing in receiving response from server(e.g. io timeout), tx.Commit() returns "invalid connection" error, and then tx.Rollback() just do nothing for tx.done==1. So is it possible that commit has been executed in server but indicates a rollback to users? |
I think database/sql should provide explicit guideline for this issue. |
Issue description
when I call func (tx *mysqlTx) Commit() (err error) ,if connection has problem it return an ErrInvalidConn
but if current connection is fine it call 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
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
err = tx.Commit(ctx)
if err != nil {
xlog.Errorf(ctx, "%s commit transaction failed, table:%v err:%v", fun, table, err) ...
Error log
Configuration
Driver version (or git SHA):
*Go version: go1.12 linux/amd64
*Server version: tidb
*Server OS: redhat7.2
The text was updated successfully, but these errors were encountered: