...

Source file src/github.com/go-redis/redis/internal/error.go

Documentation: github.com/go-redis/redis/internal

     1  package internal
     2  
     3  import (
     4  	"io"
     5  	"net"
     6  	"strings"
     7  
     8  	"github.com/go-redis/redis/internal/proto"
     9  )
    10  
    11  func IsRetryableError(err error, retryTimeout bool) bool {
    12  	if err == nil {
    13  		return false
    14  	}
    15  	if err == io.EOF {
    16  		return true
    17  	}
    18  	if netErr, ok := err.(net.Error); ok {
    19  		if netErr.Timeout() {
    20  			return retryTimeout
    21  		}
    22  		return true
    23  	}
    24  	s := err.Error()
    25  	if s == "ERR max number of clients reached" {
    26  		return true
    27  	}
    28  	if strings.HasPrefix(s, "LOADING ") {
    29  		return true
    30  	}
    31  	if strings.HasPrefix(s, "READONLY ") {
    32  		return true
    33  	}
    34  	if strings.HasPrefix(s, "CLUSTERDOWN ") {
    35  		return true
    36  	}
    37  	return false
    38  }
    39  
    40  func IsRedisError(err error) bool {
    41  	_, ok := err.(proto.RedisError)
    42  	return ok
    43  }
    44  
    45  func IsBadConn(err error, allowTimeout bool) bool {
    46  	if err == nil {
    47  		return false
    48  	}
    49  	if IsRedisError(err) {
    50  		// #790
    51  		return IsReadOnlyError(err)
    52  	}
    53  	if allowTimeout {
    54  		if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
    55  			return false
    56  		}
    57  	}
    58  	return true
    59  }
    60  
    61  func IsMovedError(err error) (moved bool, ask bool, addr string) {
    62  	if !IsRedisError(err) {
    63  		return
    64  	}
    65  
    66  	s := err.Error()
    67  	if strings.HasPrefix(s, "MOVED ") {
    68  		moved = true
    69  	} else if strings.HasPrefix(s, "ASK ") {
    70  		ask = true
    71  	} else {
    72  		return
    73  	}
    74  
    75  	ind := strings.LastIndex(s, " ")
    76  	if ind == -1 {
    77  		return false, false, ""
    78  	}
    79  	addr = s[ind+1:]
    80  	return
    81  }
    82  
    83  func IsLoadingError(err error) bool {
    84  	return strings.HasPrefix(err.Error(), "LOADING ")
    85  }
    86  
    87  func IsReadOnlyError(err error) bool {
    88  	return strings.HasPrefix(err.Error(), "READONLY ")
    89  }
    90  

View as plain text