redis/go-redis · error
redis: tx pipeline produced no outcome
Error message
redis: tx pipeline produced no outcome
What it means
Error "redis: tx pipeline produced no outcome" thrown in redis/go-redis.
Source
Thrown at osscluster.go:2636
// Connection acquisition failed — fn never ran.
if shouldRetry(err, true) && !cmdsContainNoRetry(cmds) {
outcome = &txOutcome{kind: txRetryConn, err: err}
} else {
outcome = &txOutcome{kind: txFatal, err: err}
}
}
return err
})
if !executed && chainErr != nil {
// A node-level hook aborted with an error: surface its verdict. A hook
// that returned nil short-circuited successfully (it served the batch),
// which is legal for plain pipelines too, so it is not turned into a
// fatal outcome (review finding by codex on #3942).
outcome = &txOutcome{kind: txFatal, err: chainErr}
}
if outcome == nil {
outcome = &txOutcome{kind: txFatal, err: fmt.Errorf("redis: tx pipeline produced no outcome")}
}
return outcome
}
func (c *ClusterClient) processTxPipelineNodeConn(
ctx context.Context, node *clusterNode, cn *pool.Conn, wire []Cmder, cmds []Cmder, asking bool,
) *txOutcome {
// HIMPORT bookkeeping: pending discards and PREPAREs for registered
// fieldsets the transaction references get written ahead of the wire
// batch (before ASKING/MULTI; the session state is visible at EXEC).
injected := node.Client.himportInjectedCmds(ctx, cn, cmds)
if err := cn.WithWriter(c.context(ctx), c.opt.WriteTimeout, func(wr *proto.Writer) error {
for _, ic := range injected {
if err := writeCmd(wr, ic); err != nil {
return err
}
}View on GitHub (pinned to c5cad058c7)
When it happens
Trigger: Thrown at osscluster.go:2636 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of redis/go-redis@c5cad058c7 (2026-09-01).
Data as JSON: /api/errors/96151a89de334c48.
Report an issue: GitHub.