示例#1
0
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
}