Skip to content

Commit a264ffb

Browse files
authored
fix: SetErr on Cmd if the command cannot be queued correctly in multi/exec (#3509)
* set error if queued fails * try fix for cluster * add errors to cmds in pipeline if about to be returned
1 parent e0853ab commit a264ffb

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

osscluster.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,10 +1712,16 @@ func (c *ClusterClient) txPipelineReadQueued(
17121712

17131713
for _, cmd := range cmds {
17141714
err := statusCmd.readReply(rd)
1715-
if err == nil || c.checkMovedErr(ctx, cmd, err, failedCmds) || isRedisError(err) {
1716-
continue
1715+
if err != nil {
1716+
if c.checkMovedErr(ctx, cmd, err, failedCmds) {
1717+
// will be processed later
1718+
continue
1719+
}
1720+
cmd.SetErr(err)
1721+
if !isRedisError(err) {
1722+
return err
1723+
}
17171724
}
1718-
return err
17191725
}
17201726

17211727
// Parse number of replies.

redis.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ func (c *baseClient) generalProcessPipeline(
630630
return err
631631
})
632632
if lastErr == nil || !canRetry || !shouldRetry(lastErr, true) {
633+
setCmdsErr(cmds, lastErr)
633634
return lastErr
634635
}
635636
}
@@ -703,9 +704,12 @@ func txPipelineReadQueued(rd *proto.Reader, statusCmd *StatusCmd, cmds []Cmder)
703704
}
704705

705706
// Parse +QUEUED.
706-
for range cmds {
707-
if err := statusCmd.readReply(rd); err != nil && !isRedisError(err) {
708-
return err
707+
for _, cmd := range cmds {
708+
if err := statusCmd.readReply(rd); err != nil {
709+
cmd.SetErr(err)
710+
if !isRedisError(err) {
711+
return err
712+
}
709713
}
710714
}
711715

0 commit comments

Comments
 (0)