member.go 843 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package etcdserver
  2. import (
  3. "crypto/sha1"
  4. "encoding/binary"
  5. "path"
  6. "sort"
  7. "strconv"
  8. )
  9. const machineKVPrefix = "/_etcd/machines/"
  10. type Member struct {
  11. ID int64
  12. Name string
  13. // TODO(philips): ensure these are URLs
  14. PeerURLs []string
  15. ClientURLs []string
  16. }
  17. // newMember creates a Member without an ID and generates one based on the
  18. // name, peer URLs. This is used for bootstrapping.
  19. func newMember(name string, peerURLs []string) *Member {
  20. sort.Strings(peerURLs)
  21. m := &Member{Name: name, PeerURLs: peerURLs}
  22. b := []byte(m.Name)
  23. for _, p := range m.PeerURLs {
  24. b = append(b, []byte(p)...)
  25. }
  26. hash := sha1.Sum(b)
  27. m.ID = int64(binary.BigEndian.Uint64(hash[:8]))
  28. if m.ID < 0 {
  29. m.ID = m.ID * -1
  30. }
  31. return m
  32. }
  33. func (m Member) storeKey() string {
  34. return path.Join(machineKVPrefix, strconv.FormatUint(uint64(m.ID), 16))
  35. }