Skip to content

Commit 68c38db

Browse files
authored
Merge pull request #806 from ydb-platform/rollback
* Added checking condition for `tx.Rollback()` in `retry.DoTx`
2 parents 8667f2d + 4c92c24 commit 68c38db

File tree

4 files changed

+28
-4
lines changed

4 files changed

+28
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* Added checking condition for `tx.Rollback()` in `retry.DoTx`
2+
13
## v3.51.0
24
* Added node info to grpc errors
35

internal/table/retry.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,15 @@ func doTx(
7676

7777
defer func() {
7878
if err != nil {
79-
_ = tx.Rollback(ctx)
79+
errRollback := tx.Rollback(ctx)
80+
if errRollback != nil {
81+
err = xerrors.NewWithIssues("",
82+
xerrors.WithStackTrace(err),
83+
xerrors.WithStackTrace(errRollback),
84+
)
85+
} else {
86+
err = xerrors.WithStackTrace(err)
87+
}
8088
}
8189
}()
8290

internal/xerrors/issues.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,12 @@ func (e *errorWithIssues) isYdbError() {}
7676

7777
func (e *errorWithIssues) Error() string {
7878
var b bytes.Buffer
79-
b.WriteString(e.reason)
80-
b.WriteString(", issues: [")
79+
if len(e.reason) > 0 {
80+
b.WriteString(e.reason)
81+
b.WriteString(", issues: [")
82+
} else {
83+
b.WriteString("multiple errors: [")
84+
}
8185
for i, issue := range e.issues {
8286
if i != 0 {
8387
b.WriteString(", ")

retry/sql.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,17 @@ func DoTx(ctx context.Context, db *sql.DB, f func(context.Context, *sql.Tx) erro
107107
return unwrapErrBadConn(xerrors.WithStackTrace(err))
108108
}
109109
defer func() {
110-
_ = tx.Rollback()
110+
if err != nil {
111+
errRollback := tx.Rollback()
112+
if errRollback != nil {
113+
err = xerrors.NewWithIssues("",
114+
xerrors.WithStackTrace(err),
115+
xerrors.WithStackTrace(errRollback),
116+
)
117+
} else {
118+
err = xerrors.WithStackTrace(err)
119+
}
120+
}
111121
}()
112122
if err = f(ctx, tx); err != nil {
113123
return unwrapErrBadConn(xerrors.WithStackTrace(err))

0 commit comments

Comments
 (0)