|
|
@@ -117,6 +117,7 @@ func (c *WatchCommand) Apply(server *raft.Server) (interface{}, error) {
|
|
|
|
|
|
// JoinCommand
|
|
|
type JoinCommand struct {
|
|
|
+ Version string `json:"version"`
|
|
|
Name string `json:"name"`
|
|
|
RaftURL string `json:"raftURL"`
|
|
|
EtcdURL string `json:"etcdURL"`
|
|
|
@@ -124,6 +125,9 @@ type JoinCommand struct {
|
|
|
|
|
|
func newJoinCommand() *JoinCommand {
|
|
|
return &JoinCommand{
|
|
|
+ // TODO: This will be the internal protocol version but tie it
|
|
|
+ // to the release tag for now.
|
|
|
+ Version: r.version,
|
|
|
Name: r.name,
|
|
|
RaftURL: r.url,
|
|
|
EtcdURL: e.url,
|
|
|
@@ -152,14 +156,14 @@ func (c *JoinCommand) Apply(raftServer *raft.Server) (interface{}, error) {
|
|
|
return []byte("join fail"), etcdErr.NewError(103, "")
|
|
|
}
|
|
|
|
|
|
- addNameToURL(c.Name, c.RaftURL, c.EtcdURL)
|
|
|
+ addNameToURL(c.Name, c.Version, c.RaftURL, c.EtcdURL)
|
|
|
|
|
|
// add peer in raft
|
|
|
err := raftServer.AddPeer(c.Name, "")
|
|
|
|
|
|
// add machine in etcd storage
|
|
|
key := path.Join("_etcd/machines", c.Name)
|
|
|
- value := fmt.Sprintf("raft=%s&etcd=%s", c.RaftURL, c.EtcdURL)
|
|
|
+ value := fmt.Sprintf("raft=%s&etcd=%s&version=%s", c.RaftURL, c.EtcdURL, c.Version)
|
|
|
etcdStore.Set(key, value, time.Unix(0, 0), raftServer.CommitIndex())
|
|
|
|
|
|
return []byte("join success"), err
|