From 4fd9e627c07d98e6923884cb538666b434ce23d1 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sun, 13 Apr 2014 21:33:02 -0400 Subject: [PATCH] fix(peer join) fix wrong join command redirection 1. We use PUT request to do a V2 join. So we should redirect a PUT request rather than a POST. 2. /admin only accept V2Join request. Send out V2Join instead of V1Join. --- server/peer_server.go | 8 ++++---- server/transporter.go | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/server/peer_server.go b/server/peer_server.go index e7acdc000..72d8c0f95 100644 --- a/server/peer_server.go +++ b/server/peer_server.go @@ -510,15 +510,15 @@ func (s *PeerServer) joinByPeer(server raft.Server, peer string, scheme string) if resp.StatusCode == http.StatusTemporaryRedirect { address := resp.Header.Get("Location") log.Debugf("Send Join Request to %s", address) - c := &JoinCommandV1{ + c := &JoinCommandV2{ MinVersion: store.MinVersion(), MaxVersion: store.MaxVersion(), Name: server.Name(), - RaftURL: s.Config.URL, - EtcdURL: s.server.URL(), + PeerURL: s.Config.URL, + ClientURL: s.server.URL(), } json.NewEncoder(&b).Encode(c) - resp, _, err = t.Post(address, &b) + resp, _, err = t.Put(address, &b) } else if resp.StatusCode == http.StatusBadRequest { log.Debug("Reach max number peers in the cluster") diff --git a/server/transporter.go b/server/transporter.go index d2987a2ca..fccd05e62 100644 --- a/server/transporter.go +++ b/server/transporter.go @@ -247,6 +247,13 @@ func (t *transporter) Get(urlStr string) (*http.Response, *http.Request, error) return resp, req, err } +// Send server side PUT request +func (t *transporter) Put(urlStr string, body io.Reader) (*http.Response, *http.Request, error) { + req, _ := http.NewRequest("PUT", urlStr, body) + resp, err := t.client.Do(req) + return resp, req, err +} + // PostSnapshot posts a json format snapshot to the given url // The underlying HTTP transport has a minute level timeout func (t *transporter) PostSnapshot(url string, body io.Reader) (*http.Response, error) {