etcd/etcdserver/member.go
Brandon Philips 83137f9eba pkg/types: introduce a URLs type
Cleanup the usage of URLs into its own type so we don't have to use a
FlagValue everywhere we have a list of URLs.
2014-10-01 14:41:01 -07:00

50 lines
974 B
Go

package etcdserver
import (
"crypto/sha1"
"encoding/binary"
"fmt"
"path"
"strconv"
"time"
"github.com/coreos/etcd/pkg/types"
)
const machineKVPrefix = "/_etcd/machines/"
type Member struct {
ID int64
Name string
// TODO(philips): ensure these are URLs
PeerURLs []string
ClientURLs []string
}
// newMember creates a Member without an ID and generates one based on the
// name, peer URLs. This is used for bootstrapping.
func newMember(name string, peerURLs types.URLs, now *time.Time) *Member {
m := &Member{Name: name, PeerURLs: peerURLs.StringSlice()}
b := []byte(m.Name)
for _, p := range m.PeerURLs {
b = append(b, []byte(p)...)
}
if now != nil {
b = append(b, []byte(fmt.Sprintf("%d", now.Unix()))...)
}
hash := sha1.Sum(b)
m.ID = int64(binary.BigEndian.Uint64(hash[:8]))
if m.ID < 0 {
m.ID = m.ID * -1
}
return m
}
func (m Member) storeKey() string {
return path.Join(machineKVPrefix, strconv.FormatUint(uint64(m.ID), 16))
}