1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-28 06:42:00 +03:00

Retry multiple commands more conservatively.

This commit is contained in:
Vladimir Mihailenco
2016-10-13 13:56:24 +03:00
parent 21cae7f9ab
commit 8558a92fa4
4 changed files with 53 additions and 43 deletions

View File

@ -84,26 +84,23 @@ func (c *Pipeline) pipelined(fn func(*Pipeline) error) ([]Cmder, error) {
return cmds, err
}
func execCmds(cn *pool.Conn, cmds []Cmder) ([]Cmder, error) {
func execCmds(cn *pool.Conn, cmds []Cmder) (retry bool, firstErr error) {
if err := writeCmd(cn, cmds...); err != nil {
setCmdsErr(cmds, err)
return cmds, err
return true, err
}
var firstCmdErr error
var failedCmds []Cmder
for _, cmd := range cmds {
for i, cmd := range cmds {
err := cmd.readReply(cn)
if err == nil {
continue
}
if firstCmdErr == nil {
firstCmdErr = err
if i == 0 && internal.IsNetworkError(err) {
return true, err
}
if internal.IsRetryableError(err) {
failedCmds = append(failedCmds, cmd)
if firstErr == nil {
firstErr = err
}
}
return failedCmds, firstCmdErr
return false, firstErr
}