func (mn *MasterNodes) findMaster() (string, error) { master := mn.GetMaster() if master != "" { return master, nil } mn.mutex.Lock() defer mn.mutex.Unlock() if len(mn.nodes) == 0 { return "", errors.New("No master node found!") } if mn.master == "" { for _, m := range mn.nodes { glog.V(4).Infof("Listing masters on %s", m) if masters, e := operation.ListMasters(m); e == nil { if len(masters) == 0 { continue } mn.nodes = append(masters, m) mn.master = mn.nodes[rand.Intn(len(mn.nodes))] glog.V(2).Infof("current master nodes is (nodes:%v, master:%s)", mn.nodes, mn.master) break } else { glog.V(4).Infof("Failed listing masters on %s: %v", m, e) } } } if mn.master == "" { return "", errors.New("No master node available!") } return mn.master, nil }
func (mn *MasterNodes) FindMaster() (string, error) { if len(mn.nodes) == 0 { return "", errors.New("No master node found!") } if mn.lastNode < 0 { for _, m := range mn.nodes { glog.V(4).Infof("Listing masters on %s", m) if masters, e := operation.ListMasters(m); e == nil { if len(masters) == 0 { continue } mn.nodes = append(masters, m) mn.lastNode = rand.Intn(len(mn.nodes)) glog.V(2).Infof("current master nodes is %v", mn) break } else { glog.V(4).Infof("Failed listing masters on %s: %v", m, e) } } } if mn.lastNode < 0 { return "", errors.New("No master node available!") } return mn.nodes[mn.lastNode], nil }