MCPcopy
hub / github.com/redis/go-redis / classifyCommandError

Function classifyCommandError

redis.go:897–950  ·  view source on GitHub ↗

classifyCommandError classifies an error for metrics reporting. Returns: errorType, statusCode, isInternal - errorType: A string describing the error type (e.g., "TIMEOUT", "NETWORK", "ERR") - statusCode: The Redis error prefix or error category - isInternal: true for network/timeout errors, false f

(err error)

Source from the content-addressed store, hash-verified

895// - statusCode: The Redis error prefix or error category
896// - isInternal: true for network/timeout errors, false for Redis server errors
897func classifyCommandError(err error) (errorType, statusCode string, isInternal bool) {
898 if err == nil {
899 return "", "", false
900 }
901
902 errStr := err.Error()
903
904 // Check for timeout errors
905 if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
906 return "TIMEOUT", "TIMEOUT", true
907 }
908
909 // Check for network errors
910 if _, ok := err.(net.Error); ok {
911 return "NETWORK", "NETWORK", true
912 }
913
914 // Check for context errors
915 if errors.Is(err, context.Canceled) {
916 return "CONTEXT_CANCELED", "CONTEXT_CANCELED", true
917 }
918 if errors.Is(err, context.DeadlineExceeded) {
919 return "CONTEXT_TIMEOUT", "CONTEXT_TIMEOUT", true
920 }
921
922 // Check for Redis errors
923 // Examples: "ERR ...", "WRONGTYPE ...", "CLUSTERDOWN ..."
924 if len(errStr) > 0 {
925 // Find the first space to extract the prefix
926 spaceIdx := 0
927 for i, c := range errStr {
928 if c == ' ' {
929 spaceIdx = i
930 break
931 }
932 }
933 if spaceIdx == 0 {
934 spaceIdx = len(errStr)
935 }
936 prefix := errStr[:spaceIdx]
937 isUppercase := true
938 for _, c := range prefix {
939 if c < 'A' || c > 'Z' {
940 isUppercase = false
941 break
942 }
943 }
944 if isUppercase && len(prefix) > 0 {
945 return prefix, prefix, false
946 }
947 }
948
949 return "UNKNOWN", "UNKNOWN", true
950}
951
952func (c *baseClient) assertUnstableCommand(cmd Cmder) (bool, error) {
953 // All search commands (FTSearchCmd, AggregateCmd, FTInfoCmd, FTSpellCheckCmd, FTSynDumpCmd)

Callers 2

processMethod · 0.85

Calls 2

TimeoutMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected