mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00

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.
50 lines
974 B
Go
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))
|
|
}
|