machines.go 848 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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, r.CommitIndex(), r.Term())
  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 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. }