func check_backend(ch *elliptics.DChannel, s *elliptics.Session, addr *elliptics.DnetAddr, backend_id int32, ro bool, delay uint32) error { checked := false for t := range ch.Out { st := t.(*elliptics.DnetBackendsStatus) if st.Error != nil { return st.Error } for _, b := range st.Backends { if b.Backend == backend_id { if b.RO != ro { return fmt.Errorf("backend: %d: read-only mismatch: read: %v, must be: %v", backend_id, b.RO, ro) } if b.Delay != delay { return fmt.Errorf("backend: %d: delay mismatch: read: %v, must be: %v", backend_id, b.Delay, delay) } checked = true break } } } if !checked { return fmt.Errorf("backend: %d: could not find backend", backend_id) } checked = false for t := range s.BackendsStatus(addr).Out { st := t.(*elliptics.DnetBackendsStatus) if st.Error != nil { return st.Error } for _, b := range st.Backends { if b.Backend == backend_id { if b.RO != ro { return fmt.Errorf("backend: %d: check: read-only mismatch: read: %v, must be: %v", backend_id, b.RO, ro) } if b.Delay != delay { return fmt.Errorf("backend: %d: check: delay mismatch: read: %v, must be: %v", backend_id, b.Delay, delay) } checked = true break } } } if !checked { return fmt.Errorf("backend: %d: could not find backend", backend_id) } return nil }