Skip to content

Commit 8833d09

Browse files
authored
pdutil/backend: enlarge max retry time and fix nested retriable error (#48210) (#48228)
close #46950
1 parent 457c000 commit 8833d09

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

br/pkg/lightning/common/retry.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ func isSingleRetryableError(err error) bool {
105105
if nerr.Timeout() {
106106
return true
107107
}
108-
if syscallErr, ok := goerrors.Unwrap(err).(*os.SyscallError); ok {
108+
// the error might be nested, such as *url.Error -> *net.OpError -> *os.SyscallError
109+
var syscallErr *os.SyscallError
110+
if goerrors.As(nerr, &syscallErr) {
109111
return syscallErr.Err == syscall.ECONNREFUSED || syscallErr.Err == syscall.ECONNRESET
110112
}
111113
return false

br/pkg/lightning/common/retry_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"fmt"
2020
"io"
2121
"net"
22+
"net/url"
2223
"testing"
2324

2425
"github.com/go-sql-driver/mysql"
@@ -66,6 +67,9 @@ func TestIsRetryableError(t *testing.T) {
6667
_, err := net.Dial("tcp", "localhost:65533")
6768
require.Error(t, err)
6869
require.True(t, IsRetryableError(err))
70+
// wrap net.OpErr inside url.Error
71+
urlErr := &url.Error{Op: "post", Err: err}
72+
require.True(t, IsRetryableError(urlErr))
6973

7074
// MySQL Errors
7175
require.False(t, IsRetryableError(&mysql.MySQLError{}))

br/pkg/pdutil/pd.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ const (
5252
pauseTimeout = 5 * time.Minute
5353

5454
// pd request retry time when connection fail
55-
pdRequestRetryTime = 10
56-
55+
pdRequestRetryTime = 120
5756
// set max-pending-peer-count to a large value to avoid scatter region failed.
5857
maxPendingPeerUnlimited uint64 = math.MaxInt32
5958
)
@@ -169,6 +168,7 @@ func pdRequestWithCode(
169168
resp *http.Response
170169
)
171170
count := 0
171+
// the total retry duration: 120*1 = 2min
172172
for {
173173
req, err = http.NewRequestWithContext(ctx, method, reqURL, body)
174174
if err != nil {

0 commit comments

Comments
 (0)