11package internalstorage
22
33import (
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+
2029func 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