From 04539c62402e3afda4d69cada548e88c1523a5e6 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 4 Sep 2015 10:20:13 -0700 Subject: [PATCH] etcdctl: prepare for health endpoint change We made a mistake on the health endpoint by returning a string "true". We have to make the etcdctl works for the next version of etcd which will correct the mistake on the server side. It is too late to change the server side right now since we already released a version of etcdctl that only understands "true". --- etcdctl/command/cluster_health.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/etcdctl/command/cluster_health.go b/etcdctl/command/cluster_health.go index 303e06f37..d9015afbe 100644 --- a/etcdctl/command/cluster_health.go +++ b/etcdctl/command/cluster_health.go @@ -3,6 +3,7 @@ package command import ( "encoding/json" "fmt" + "io/ioutil" "net/http" "os" "os/signal" @@ -70,9 +71,18 @@ func handleClusterHealth(c *cli.Context) { } result := struct{ Health string }{} - d := json.NewDecoder(resp.Body) - err = d.Decode(&result) + nresult := struct{ Health bool }{} + bytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + fmt.Printf("failed to check the health of member %s on %s: %v\n", m.ID, url, err) + continue + } resp.Body.Close() + + err = json.Unmarshal(bytes, &result) + if err != nil { + err = json.Unmarshal(bytes, &nresult) + } if err != nil { fmt.Printf("failed to check the health of member %s on %s: %v\n", m.ID, url, err) continue