// scanCluster is like Scan except it operates over a whole cluster. Unlike Scan // it only works with SCAN and as such only takes in a pattern string. func scanCluster(c *cluster.Cluster, ch chan string, pattern string) error { defer close(ch) clients, err := c.GetEvery() if err != nil { return err } for _, client := range clients { defer c.Put(client) } for _, client := range clients { cch := make(chan string) var err error go func() { err = scanSingle(client, cch, "SCAN", "", pattern) }() for key := range cch { ch <- key } if err != nil { return err } } return nil }