feat(command): add version to join command

Add a version to the join command. Add a versioning document to discuss
some of the design decisions.
This commit is contained in:
Brandon Philips
2013-08-18 17:31:38 -07:00
parent e091923311
commit 53b2038d2e
5 changed files with 80 additions and 3 deletions

View File

@ -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