diff --git a/pkg/vitess/api_client.go b/pkg/vitess/api_client.go index c589449e..f1b252e0 100644 --- a/pkg/vitess/api_client.go +++ b/pkg/vitess/api_client.go @@ -5,6 +5,7 @@ import ( "fmt" "io/ioutil" "net/http" + "net/url" "strings" "time" @@ -44,14 +45,21 @@ var httpClient = http.Client{ Timeout: defaultTimeout, } -func constructAPIURL(settings config.VitessConfigurationSettings) (url string) { +func constructAPIURL(settings config.VitessConfigurationSettings) (apiUrl string) { api := strings.TrimRight(settings.API, "/") if !strings.HasSuffix(api, "/api") { api = fmt.Sprintf("%s/api", api) } - url = fmt.Sprintf("%s/keyspace/%s/tablets/%s", api, settings.Keyspace, settings.Shard) - - return url + queryParams := url.Values{} + validCells := ParseCells(settings) + if len(validCells) > 0 { + queryParams.Add("cells", strings.Join(validCells, ",")) + } + apiUrl = fmt.Sprintf("%s/keyspace/%s/tablets/%s", api, settings.Keyspace, settings.Shard) + if len(queryParams) > 0 { + apiUrl = fmt.Sprintf("%s?%s", apiUrl, queryParams.Encode()) + } + return apiUrl } // ParseCells returns a slice of non-empty Vitess cell names diff --git a/pkg/vitess/api_client_test.go b/pkg/vitess/api_client_test.go index 6ea8905f..31682317 100644 --- a/pkg/vitess/api_client_test.go +++ b/pkg/vitess/api_client_test.go @@ -15,7 +15,7 @@ import ( func TestParseTablets(t *testing.T) { vitessApi := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.String() { - case "/api/keyspace/test/tablets/00": + case "/api/keyspace/test/tablets/00", "/api/keyspace/test/tablets/00?cells=cell2": data, _ := json.Marshal([]Tablet{ { Alias: &topodata.TabletAlias{Cell: "cell1"},