func()

in swim/memberlist.go [231:247]


func (m *memberlist) RandomPingableMembers(n int, excluding map[string]bool) []Member {
	members := make([]Member, 0, n)

	m.members.RLock()
	indices := rand.Perm(len(m.members.list))
	for _, index := range indices {
		member := m.members.list[index]
		if m.Pingable(*member) && !excluding[member.Address] {
			members = append(members, *member)
			if len(members) >= n {
				break
			}
		}
	}
	m.members.RUnlock()
	return members
}