Skip to content

Commit b4d768a

Browse files
authored
Merge pull request #461 from cleverhu/add-retry-for-bad-conn
internalstorage: add recoverable err
2 parents 40249cd + b591434 commit b4d768a

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

pkg/storage/internalstorage/errors.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package internalstorage
22

33
import (
4+
"database/sql/driver"
45
"errors"
56
"fmt"
67
"io"
@@ -17,6 +18,14 @@ import (
1718
"github.com/clusterpedia-io/clusterpedia/pkg/storage"
1819
)
1920

21+
var recoverableErrors = []error{
22+
io.ErrClosedPipe,
23+
io.ErrUnexpectedEOF,
24+
os.ErrDeadlineExceeded,
25+
syscall.ECONNREFUSED,
26+
driver.ErrBadConn,
27+
}
28+
2029
func InterpretResourceDBError(cluster, name string, err error) error {
2130
if err == nil {
2231
return nil
@@ -34,15 +43,20 @@ func InterpretDBError(key string, err error) error {
3443
return genericstorage.NewKeyNotFoundError(key, 0)
3544
}
3645

37-
if _, isNetError := err.(net.Error); isNetError ||
38-
errors.Is(err, io.ErrClosedPipe) ||
39-
errors.Is(err, io.ErrUnexpectedEOF) ||
40-
os.IsTimeout(err) ||
41-
errors.Is(err, os.ErrDeadlineExceeded) ||
42-
errors.Is(err, syscall.ECONNREFUSED) {
46+
if _, isNetError := err.(net.Error); isNetError {
4347
return storage.NewRecoverableException(err)
4448
}
4549

50+
if os.IsTimeout(err) {
51+
return storage.NewRecoverableException(err)
52+
}
53+
54+
for _, re := range recoverableErrors {
55+
if errors.Is(err, re) {
56+
return storage.NewRecoverableException(err)
57+
}
58+
}
59+
4660
// TODO(iceber): add dialector judgment
4761
mysqlErr := InterpretMysqlError(key, err)
4862
if mysqlErr != err {

0 commit comments

Comments
 (0)