( ctx context.Context, cmd Cmder, err error, failedCmds *cmdsMap, )
| 1790 | } |
| 1791 | |
| 1792 | func (c *ClusterClient) checkMovedErr( |
| 1793 | ctx context.Context, cmd Cmder, err error, failedCmds *cmdsMap, |
| 1794 | ) bool { |
| 1795 | moved, ask, addr := isMovedError(err) |
| 1796 | if !moved && !ask { |
| 1797 | return false |
| 1798 | } |
| 1799 | |
| 1800 | node, err := c.nodes.GetOrCreate(addr) |
| 1801 | if err != nil { |
| 1802 | return false |
| 1803 | } |
| 1804 | |
| 1805 | if moved { |
| 1806 | c.state.LazyReload() |
| 1807 | failedCmds.Add(node, cmd) |
| 1808 | return true |
| 1809 | } |
| 1810 | |
| 1811 | if ask { |
| 1812 | failedCmds.Add(node, NewCmd(ctx, "asking"), cmd) |
| 1813 | return true |
| 1814 | } |
| 1815 | |
| 1816 | panic("not reached") |
| 1817 | } |
| 1818 | |
| 1819 | // TxPipeline acts like Pipeline, but wraps queued commands with MULTI/EXEC. |
| 1820 | func (c *ClusterClient) TxPipeline() Pipeliner { |
no test coverage detected