Allow override of Vitess HTTP timeout by timvaillancourt · Pull Request #120 · github/freno · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions pkg/config/vitess_config.go
2 changes: 1 addition & 1 deletion pkg/throttle/throttler.go
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ func (throttler *Throttler) refreshMySQLInventory() error {
log.Debugf("getting vitess data from %s", clusterSettings.VitessSettings.API)
keyspace := clusterSettings.VitessSettings.Keyspace
shard := clusterSettings.VitessSettings.Shard
tablets, err := vitess.ParseTablets(clusterSettings.VitessSettings.API, keyspace, shard)
tablets, err := vitess.ParseTablets(clusterSettings.VitessSettings)
if err != nil {
return log.Errorf("Unable to get vitess hosts from %s, %s/%s: %+v", clusterSettings.VitessSettings.API, keyspace, shard, err)
}
Expand Down
21 changes: 15 additions & 6 deletions pkg/vitess/api_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@ import (
"strings"
"time"

"github.com/github/freno/pkg/config"
"vitess.io/vitess/go/vt/proto/topodata"
)

const defaultTimeout = time.Duration(5) * time.Second

// Tablet represents information about a running instance of vttablet.
type Tablet struct {
MysqlHostname string `json:"mysql_hostname,omitempty"`
Expand All @@ -24,15 +27,15 @@ func (t Tablet) IsValidReplica() bool {
}

var httpClient = http.Client{
Timeout: 1 * time.Second,
Timeout: defaultTimeout,
}

func constructAPIURL(api string, keyspace string, shard string) (url string) {
api = strings.TrimRight(api, "/")
func constructAPIURL(settings config.VitessConfigurationSettings) (url 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, keyspace, shard)
url = fmt.Sprintf("%s/keyspace/%s/tablets/%s", api, settings.Keyspace, settings.Shard)

return url
}
Expand All @@ -49,8 +52,14 @@ func filterReplicaTablets(tablets []Tablet) (replicas []Tablet) {

// ParseTablets reads from vitess /api/ks_tablets/<keyspace>/[shard] and returns a
// listing (mysql_hostname, mysql_port, type) of REPLICA tablets
func ParseTablets(api string, keyspace string, shard string) (tablets []Tablet, err error) {
url := constructAPIURL(api, keyspace, shard)
func ParseTablets(settings config.VitessConfigurationSettings) (tablets []Tablet, err error) {
if settings.TimeoutSecs == 0 {
httpClient.Timeout = defaultTimeout
} else {
httpClient.Timeout = time.Duration(settings.TimeoutSecs) * time.Second
}

url := constructAPIURL(settings)
resp, err := httpClient.Get(url)
if err != nil {
return tablets, err
Expand Down
29 changes: 26 additions & 3 deletions pkg/vitess/api_client_test.go