From a8ff1b27d4f186081c2bb1291eea488138e253bc Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sun, 22 Sep 2013 11:20:08 -0400 Subject: [PATCH] init peerStats in transportation.go; avoid nil pointer due to restart from snapshot(we do not keep stats in persistentlayer yet) --- command.go | 4 ---- transporter.go | 9 ++++++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/command.go b/command.go index 0147811da..b9dbb0919 100644 --- a/command.go +++ b/command.go @@ -170,10 +170,6 @@ func (c *JoinCommand) Apply(raftServer *raft.Server) (interface{}, error) { value := fmt.Sprintf("raft=%s&etcd=%s&raftVersion=%s", c.RaftURL, c.EtcdURL, c.RaftVersion) etcdStore.Set(key, value, time.Unix(0, 0), raftServer.CommitIndex()) - if c.Name != r.Name() { - r.peersStats[c.Name] = &raftPeerStats{MinLatency: 1 << 63} - } - return b, err } diff --git a/transporter.go b/transporter.go index 461741ce6..517bb7dc4 100644 --- a/transporter.go +++ b/transporter.go @@ -68,6 +68,11 @@ func (t *transporter) SendAppendEntriesRequest(server *raft.Server, peer *raft.P thisPeerStats, ok := r.peersStats[peer.Name] + if !ok { // we first see this peer + thisPeerStats = &raftPeerStats{MinLatency: 1 << 63} + r.peersStats[peer.Name] = thisPeerStats + } + start := time.Now() resp, err := t.Post(fmt.Sprintf("%s/log/append", u), &b) @@ -85,8 +90,6 @@ func (t *transporter) SendAppendEntriesRequest(server *raft.Server, peer *raft.P } } - r.peersStats[peer.Name] = thisPeerStats - if resp != nil { defer resp.Body.Close() aersp = &raft.AppendEntriesResponse{} @@ -211,7 +214,7 @@ func (t *transporter) Get(path string) (*http.Response, error) { func (t *transporter) waitResponse(responseChan chan *transporterResponse) (*http.Response, error) { - timeoutChan := time.After(t.timeout) + timeoutChan := time.After(t.timeout * 10) select { case <-timeoutChan: