first round of comments

Conflicts:
	etcdserver/config.go
	etcdserver/config_test.go
	etcdserver/server.go
	main.go
This commit is contained in:
Barak Michener 2014-10-13 18:40:25 -04:00
parent 456d1ebcae
commit 1ca7c031ff
5 changed files with 35 additions and 40 deletions

View File

@ -27,7 +27,8 @@ import (
// ServerConfig holds the configuration of etcd as taken from the command line or discovery. // ServerConfig holds the configuration of etcd as taken from the command line or discovery.
type ServerConfig struct { type ServerConfig struct {
LocalMember Member NodeID uint64
Name string
DiscoveryURL string DiscoveryURL string
ClientURLs types.URLs ClientURLs types.URLs
DataDir string DataDir string
@ -47,14 +48,14 @@ func (c *ServerConfig) VerifyBootstrapConfig() error {
// Make sure the cluster at least contains the local server. // Make sure the cluster at least contains the local server.
isOk := false isOk := false
for _, m := range c.Cluster.members { for _, m := range c.Cluster.members {
if m.ID == c.LocalMember.ID { if m.ID == c.NodeID {
isOk = true isOk = true
} }
} }
if !isOk { if !isOk {
return fmt.Errorf("couldn't find local ID in cluster config") return fmt.Errorf("couldn't find local ID in cluster config")
} }
if c.LocalMember.ID == raft.None { if c.NodeID == raft.None {
return fmt.Errorf("could not use %x as member id", raft.None) return fmt.Errorf("could not use %x as member id", raft.None)
} }
@ -75,8 +76,6 @@ func (c *ServerConfig) WALDir() string { return path.Join(c.DataDir, "wal") }
func (c *ServerConfig) SnapDir() string { return path.Join(c.DataDir, "snap") } func (c *ServerConfig) SnapDir() string { return path.Join(c.DataDir, "snap") }
func (c *ServerConfig) ID() uint64 { return c.LocalMember.ID }
func (c *ServerConfig) ShouldDiscover() bool { func (c *ServerConfig) ShouldDiscover() bool {
return c.DiscoveryURL != "" return c.DiscoveryURL != ""
} }

View File

@ -51,9 +51,7 @@ func TestBootstrapConfigVerify(t *testing.T) {
} }
cfg := ServerConfig{ cfg := ServerConfig{
LocalMember: Member{ NodeID: 0x7350a9cd4dc16f76,
ID: 0x7350a9cd4dc16f76,
},
DiscoveryURL: tt.disc, DiscoveryURL: tt.disc,
Cluster: cluster, Cluster: cluster,
ClusterState: tt.clst, ClusterState: tt.clst,

View File

@ -180,7 +180,7 @@ func NewServer(cfg *ServerConfig) *EtcdServer {
log.Fatalf("etcdserver: %v", err) log.Fatalf("etcdserver: %v", err)
} }
if cfg.ShouldDiscover() { if cfg.ShouldDiscover() {
d, err := discovery.New(cfg.DiscoveryURL, cfg.ID(), cfg.Cluster.String()) d, err := discovery.New(cfg.DiscoveryURL, cfg.NodeID, cfg.Cluster.String())
if err != nil { if err != nil {
log.Fatalf("etcdserver: cannot init discovery %v", err) log.Fatalf("etcdserver: cannot init discovery %v", err)
} }
@ -213,17 +213,17 @@ func NewServer(cfg *ServerConfig) *EtcdServer {
cls := &clusterStore{Store: st, id: cid} cls := &clusterStore{Store: st, id: cid}
sstats := &stats.ServerStats{ sstats := &stats.ServerStats{
Name: cfg.LocalMember.Attributes.Name, Name: cfg.Name,
ID: idAsHex(cfg.ID()), ID: idAsHex(cfg.NodeID),
} }
lstats := stats.NewLeaderStats(idAsHex(cfg.ID())) lstats := stats.NewLeaderStats(idAsHex(cfg.NodeID))
s := &EtcdServer{ s := &EtcdServer{
store: st, store: st,
node: n, node: n,
id: id, id: id,
clusterID: cid, clusterID: cid,
attributes: Attributes{Name: cfg.LocalMember.Attributes.Name, ClientURLs: cfg.ClientURLs.StringSlice()}, attributes: Attributes{Name: cfg.Name, ClientURLs: cfg.ClientURLs.StringSlice()},
storage: struct { storage: struct {
*wal.WAL *wal.WAL
*snap.Snapshotter *snap.Snapshotter
@ -640,7 +640,7 @@ func startNode(cfg *ServerConfig) (id, cid uint64, n raft.Node, w *wal.WAL) {
// TODO: remove the discoveryURL when it becomes part of the source for // TODO: remove the discoveryURL when it becomes part of the source for
// generating nodeID. // generating nodeID.
cfg.Cluster.GenID([]byte(cfg.DiscoveryURL)) cfg.Cluster.GenID([]byte(cfg.DiscoveryURL))
metadata := pbutil.MustMarshal(&pb.Metadata{NodeID: cfg.ID(), ClusterID: cfg.Cluster.ID()}) metadata := pbutil.MustMarshal(&pb.Metadata{NodeID: cfg.NodeID, ClusterID: cfg.Cluster.ID()})
if w, err = wal.Create(cfg.WALDir(), metadata); err != nil { if w, err = wal.Create(cfg.WALDir(), metadata); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -653,9 +653,9 @@ func startNode(cfg *ServerConfig) (id, cid uint64, n raft.Node, w *wal.WAL) {
} }
peers[i] = raft.Peer{ID: id, Context: ctx} peers[i] = raft.Peer{ID: id, Context: ctx}
} }
id, cid = cfg.ID(), cfg.Cluster.ID() id, cid = cfg.NodeID, cfg.Cluster.ID()
log.Printf("etcdserver: start node %d in cluster %d", id, cid) log.Printf("etcdserver: start node %d in cluster %d", id, cid)
n = raft.StartNode(cfg.ID(), peers, 10, 1) n = raft.StartNode(cfg.NodeID, peers, 10, 1)
return return
} }

View File

@ -103,7 +103,9 @@ func (c *cluster) Launch(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
m.LocalMember = *etcdserver.NewMemberFromURLs(c.name(i), listenUrls) localMember := *etcdserver.NewMemberFromURLs(c.name(i), listenUrls)
m.NodeID = localMember.ID
m.Name = localMember.Name
m.ClientURLs, err = types.NewURLs([]string{"http://" + cln.Addr().String()}) m.ClientURLs, err = types.NewURLs([]string{"http://" + cln.Addr().String()})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)

20
main.go
View File

@ -167,7 +167,8 @@ func startEtcd(self *etcdserver.Member) {
log.Fatal(err.Error()) log.Fatal(err.Error())
} }
cfg := &etcdserver.ServerConfig{ cfg := &etcdserver.ServerConfig{
LocalMember: *self, NodeID: self.ID,
Name: *name,
ClientURLs: acurls, ClientURLs: acurls,
DataDir: *dir, DataDir: *dir,
SnapCount: *snapCount, SnapCount: *snapCount,
@ -276,11 +277,12 @@ func setupCluster() (*etcdserver.Member, error) {
if set["discovery"] && set["initial-cluster"] { if set["discovery"] && set["initial-cluster"] {
return nil, fmt.Errorf("both discovery and bootstrap-config are set") return nil, fmt.Errorf("both discovery and bootstrap-config are set")
} }
if set["discovery"] {
apurls, err := pkg.URLsFromFlags(fs, "advertise-peer-urls", "peer-addr", peerTLSInfo) apurls, err := pkg.URLsFromFlags(flag.CommandLine, "advertise-peer-urls", "addr", peerTLSInfo)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if set["discovery"] {
m = etcdserver.NewMemberFromURLs(*name, apurls) m = etcdserver.NewMemberFromURLs(*name, apurls)
cluster = etcdserver.NewCluster() cluster = etcdserver.NewCluster()
cluster.Add(*m) cluster.Add(*m)
@ -288,20 +290,14 @@ func setupCluster() (*etcdserver.Member, error) {
} else if set["initial-cluster"] { } else if set["initial-cluster"] {
// We're statically configured, and cluster has appropriately been set. // We're statically configured, and cluster has appropriately been set.
// Try to configure by indexing the static cluster by name. // Try to configure by indexing the static cluster by name.
if set["name"] {
for _, c := range cluster.Members() { for _, c := range cluster.Members() {
if c.Name == *name { if c.Name == *name {
return c, nil return c, nil
} }
} }
log.Println("etcd: cannot find the passed name", *name, "in initial-cluster. Trying advertise-peer-urls") log.Println("etcd: cannot find the passed name", *name, "in initial-cluster. Trying advertise-peer-urls")
}
// Try to configure by looking for a matching machine based on the peer urls. // Try to configure by looking for a matching machine based on the peer urls.
if set["advertise-peer-urls"] {
apurls, err := pkg.URLsFromFlags(flag.CommandLine, "advertise-peer-urls", "addr", peerTLSInfo)
if err != nil {
return nil, err
}
m = etcdserver.NewMemberFromURLs(*name, apurls) m = etcdserver.NewMemberFromURLs(*name, apurls)
for _, c := range cluster.Members() { for _, c := range cluster.Members() {
if c.ID == m.ID { if c.ID == m.ID {
@ -309,8 +305,8 @@ func setupCluster() (*etcdserver.Member, error) {
} }
} }
log.Println("etcd: Could not find a matching peer for the local instance in initial-cluster.") log.Println("etcd: Could not find a matching peer for the local instance in initial-cluster.")
}
return nil, fmt.Errorf("etcd: Bootstrapping a static cluster, but local name or local peer urls are not defined") return nil, fmt.Errorf("etcd: Bootstrapping a static cluster, but local name or local peer urls are not defined")
} }
return nil, fmt.Errorf("etcd: Flag configuration not set for discovery or initial-cluster") m = etcdserver.NewMemberFromURLs(*name, apurls)
return m, nil
} }