From b84fef6e1637619e4650d86942e4a11360ddaa1a Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 10 Jan 2022 14:45:41 +0800 Subject: [PATCH] lightning: add more retryable error type (#31484) (#31505) close pingcap/tidb#31376 --- br/pkg/utils/retry.go | 4 +++- br/pkg/utils/retry_test.go | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/br/pkg/utils/retry.go b/br/pkg/utils/retry.go index a076190b953d6..51a833d8d136c 100644 --- a/br/pkg/utils/retry.go +++ b/br/pkg/utils/retry.go @@ -117,7 +117,9 @@ func isSingleRetryableError(err error) bool { case *mysql.MySQLError: switch nerr.Number { // ErrLockDeadlock can retry to commit while meet deadlock - case tmysql.ErrUnknown, tmysql.ErrLockDeadlock, tmysql.ErrWriteConflictInTiDB, tmysql.ErrPDServerTimeout, tmysql.ErrTiKVServerTimeout, tmysql.ErrTiKVServerBusy, tmysql.ErrResolveLockTimeout, tmysql.ErrRegionUnavailable: + case tmysql.ErrUnknown, tmysql.ErrLockDeadlock, tmysql.ErrWriteConflict, tmysql.ErrWriteConflictInTiDB, + tmysql.ErrPDServerTimeout, tmysql.ErrTiKVServerTimeout, tmysql.ErrTiKVServerBusy, tmysql.ErrResolveLockTimeout, + tmysql.ErrRegionUnavailable, tmysql.ErrInfoSchemaExpired, tmysql.ErrInfoSchemaChanged, tmysql.ErrTxnRetryable: return true default: return false diff --git a/br/pkg/utils/retry_test.go b/br/pkg/utils/retry_test.go index f27698dcf5f9a..eafe233b7d49e 100644 --- a/br/pkg/utils/retry_test.go +++ b/br/pkg/utils/retry_test.go @@ -34,6 +34,10 @@ func TestIsRetryableError(t *testing.T) { require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrResolveLockTimeout})) require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrRegionUnavailable})) require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrWriteConflictInTiDB})) + require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrWriteConflict})) + require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrInfoSchemaExpired})) + require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrInfoSchemaChanged})) + require.True(t, IsRetryableError(&mysql.MySQLError{Number: tmysql.ErrTxnRetryable})) // gRPC Errors require.False(t, IsRetryableError(status.Error(codes.Canceled, "")))