From 38bb2c690be05db23f14ef6a71f5e6c938a6c31f Mon Sep 17 00:00:00 2001 From: Tim Vaillancourt Date: Thu, 23 Jul 2020 01:10:47 +0200 Subject: [PATCH] Vitess: handle non-200 HTTP response --- pkg/vitess/api_client.go | 9 ++++++--- pkg/vitess/api_client_test.go | 7 +++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pkg/vitess/api_client.go b/pkg/vitess/api_client.go index 78dea3fe..f46a4ce4 100644 --- a/pkg/vitess/api_client.go +++ b/pkg/vitess/api_client.go @@ -71,7 +71,7 @@ func filterReplicaTablets(settings config.VitessConfigurationSettings, tablets [ return replicas } -// ParseTablets reads from vitess /api/ks_tablets//[shard] and returns a +// ParseTablets reads from vitess /api/keyspace//tablets/[shard] and returns a // listing (mysql_hostname, mysql_port, type) of REPLICA tablets func ParseTablets(settings config.VitessConfigurationSettings) (tablets []Tablet, err error) { if settings.TimeoutSecs == 0 { @@ -85,13 +85,16 @@ func ParseTablets(settings config.VitessConfigurationSettings) (tablets []Tablet if err != nil { return tablets, err } - defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return tablets, fmt.Errorf("%v", resp.Status) + } + body, err := ioutil.ReadAll(resp.Body) if err != nil { return tablets, err } - err = json.Unmarshal(body, &tablets) return filterReplicaTablets(settings, tablets), err } diff --git a/pkg/vitess/api_client_test.go b/pkg/vitess/api_client_test.go index fcf84720..6ea8905f 100644 --- a/pkg/vitess/api_client_test.go +++ b/pkg/vitess/api_client_test.go @@ -56,7 +56,6 @@ func TestParseTablets(t *testing.T) { fmt.Fprint(w, string(data)) default: w.WriteHeader(http.StatusNotFound) - fmt.Fprint(w, "[]") } })) defer vitessApi.Close() @@ -125,11 +124,11 @@ func TestParseTablets(t *testing.T) { Keyspace: "not-found", Shard: "40-80", }) - if err != nil { - t.Fatalf("Expected no error, got %q", err) + if err == nil || err.Error() != "404 Not Found" { + t.Fatalf("Expected %q error, got %q", "404 Not Found", err) } - if len(tablets) > 0 { + if len(tablets) != 0 { t.Fatalf("Expected 0 tablets, got %d", len(tablets)) }