machines.go 842 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package main
  2. // machineNum returns the number of machines in the cluster
  3. func machineNum() int {
  4. e, err := etcdStore.Get("/_etcd/machines", false, false, 0, 0)
  5. if err != nil {
  6. return 0
  7. }
  8. return len(e.KVPairs)
  9. }
  10. // getMachines gets the current machines in the cluster
  11. func (r *raftServer) getMachines(toURL func(string) (string, bool)) []string {
  12. peers := r.Peers()
  13. machines := make([]string, len(peers)+1)
  14. leader, ok := toURL(r.Leader())
  15. self, _ := toURL(r.Name())
  16. i := 1
  17. if ok {
  18. machines[0] = leader
  19. if leader != self {
  20. machines[1] = self
  21. i = 2
  22. }
  23. } else {
  24. machines[0] = self
  25. }
  26. // Add all peers to the slice
  27. for peerName, _ := range peers {
  28. if machine, ok := toURL(peerName); ok {
  29. // do not add leader twice
  30. if machine != leader {
  31. machines[i] = machine
  32. i++
  33. }
  34. }
  35. }
  36. return machines
  37. }