Browse Source

etcdctl: health use etcd/client

Xiang Li 10 years ago
parent
commit
071ad9f72b
1 changed files with 10 additions and 37 deletions
  1. 10 37
      etcdctl/command/cluster_health.go

+ 10 - 37
etcdctl/command/cluster_health.go

@@ -7,12 +7,11 @@ import (
 	"net/http"
 	"net/http"
 	"os"
 	"os"
 	"sort"
 	"sort"
-	"strings"
 	"time"
 	"time"
 
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/codegangsta/cli"
 	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/codegangsta/cli"
-	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/go-etcd/etcd"
 	"github.com/coreos/etcd/etcdserver/stats"
 	"github.com/coreos/etcd/etcdserver/stats"
+	"golang.org/x/net/context"
 )
 )
 
 
 func NewClusterHealthCommand() cli.Command {
 func NewClusterHealthCommand() cli.Command {
@@ -25,58 +24,32 @@ func NewClusterHealthCommand() cli.Command {
 }
 }
 
 
 func handleClusterHealth(c *cli.Context) {
 func handleClusterHealth(c *cli.Context) {
-	endpoints, err := getEndpoints(c)
+	tr, err := getTransport(c)
 	if err != nil {
 	if err != nil {
 		handleError(ExitServerError, err)
 		handleError(ExitServerError, err)
 	}
 	}
-	tr, err := getTransport(c)
+
+	mi := mustNewMembersAPI(c)
+	ms, err := mi.List(context.TODO())
 	if err != nil {
 	if err != nil {
 		handleError(ExitServerError, err)
 		handleError(ExitServerError, err)
 	}
 	}
 
 
-	client := etcd.NewClient(endpoints)
-	client.SetTransport(tr)
-
-	if ok := client.SyncCluster(); !ok {
-		handleError(ExitBadConnection, errors.New("cannot sync with the cluster using endpoints "+strings.Join(endpoints, ", ")))
+	cl := make([]string, 0)
+	for _, m := range ms {
+		cl = append(cl, m.ClientURLs...)
 	}
 	}
 
 
-	// do we have a leader?
-	cl := client.GetCluster()
+	// check the /health endpoint of all members first
+
 	ep, ls0, err := getLeaderStats(tr, cl)
 	ep, ls0, err := getLeaderStats(tr, cl)
 	if err != nil {
 	if err != nil {
 		fmt.Println("cluster may be unhealthy: failed to connect", cl)
 		fmt.Println("cluster may be unhealthy: failed to connect", cl)
 		os.Exit(1)
 		os.Exit(1)
 	}
 	}
 
 
-	// is raft stable and making progress?
-	client = etcd.NewClient([]string{ep})
-	client.SetTransport(tr)
-	resp, err := client.Get("/", false, false)
-	if err != nil {
-		fmt.Println("cluster is unhealthy")
-		os.Exit(1)
-	}
-	rt0, ri0 := resp.RaftTerm, resp.RaftIndex
 	time.Sleep(time.Second)
 	time.Sleep(time.Second)
 
 
-	resp, err = client.Get("/", false, false)
-	if err != nil {
-		fmt.Println("cluster is unhealthy")
-		os.Exit(1)
-	}
-	rt1, ri1 := resp.RaftTerm, resp.RaftIndex
-
-	if rt0 != rt1 {
-		fmt.Println("cluster is unhealthy")
-		os.Exit(1)
-	}
-
-	if ri1 == ri0 {
-		fmt.Println("cluster is unhealthy")
-		os.Exit(1)
-	}
-
 	// are all the members makeing progress?
 	// are all the members makeing progress?
 	_, ls1, err := getLeaderStats(tr, []string{ep})
 	_, ls1, err := getLeaderStats(tr, []string{ep})
 	if err != nil {
 	if err != nil {