Skip to content

Commit 720182f

Browse files
Merge pull request #824 from github/connection-timeout
Support --mysql-timeout flag
2 parents 835e86e + 28bbe67 commit 720182f

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

go/cmd/gh-ost/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func main() {
4848
flag.StringVar(&migrationContext.InspectorConnectionConfig.Key.Hostname, "host", "127.0.0.1", "MySQL hostname (preferably a replica, not the master)")
4949
flag.StringVar(&migrationContext.AssumeMasterHostname, "assume-master-host", "", "(optional) explicitly tell gh-ost the identity of the master. Format: some.host.com[:port] This is useful in master-master setups where you wish to pick an explicit master, or in a tungsten-replicator where gh-ost is unable to determine the master")
5050
flag.IntVar(&migrationContext.InspectorConnectionConfig.Key.Port, "port", 3306, "MySQL port (preferably a replica, not the master)")
51+
flag.Float64Var(&migrationContext.InspectorConnectionConfig.Timeout, "mysql-timeout", 0.0, "Connect, read and write timeout for MySQL")
5152
flag.StringVar(&migrationContext.CliUser, "user", "", "MySQL user")
5253
flag.StringVar(&migrationContext.CliPassword, "password", "", "MySQL password")
5354
flag.StringVar(&migrationContext.CliMasterUser, "master-user", "", "MySQL user on master, if different from that on replica. Requires --assume-master-host")

go/mysql/connection.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type ConnectionConfig struct {
2727
Password string
2828
ImpliedKey *InstanceKey
2929
tlsConfig *tls.Config
30+
Timeout float64
3031
}
3132

3233
func NewConnectionConfig() *ConnectionConfig {
@@ -44,6 +45,7 @@ func (this *ConnectionConfig) DuplicateCredentials(key InstanceKey) *ConnectionC
4445
User: this.User,
4546
Password: this.Password,
4647
tlsConfig: this.tlsConfig,
48+
Timeout: this.Timeout,
4749
}
4850
config.ImpliedKey = &config.Key
4951
return config
@@ -116,5 +118,5 @@ func (this *ConnectionConfig) GetDBUri(databaseName string) string {
116118
if this.tlsConfig != nil {
117119
tlsOption = TLS_CONFIG_KEY
118120
}
119-
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?interpolateParams=%t&autocommit=true&charset=utf8mb4,utf8,latin1&tls=%s", this.User, this.Password, hostname, this.Key.Port, databaseName, interpolateParams, tlsOption)
121+
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?timeout=%fs&readTimeout=%fs&writeTimeout=%fs&interpolateParams=%t&autocommit=true&charset=utf8mb4,utf8,latin1&tls=%s", this.User, this.Password, hostname, this.Key.Port, databaseName, this.Timeout, this.Timeout, this.Timeout, interpolateParams, tlsOption)
120122
}

go/mysql/connection_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func TestGetDBUri(t *testing.T) {
6969
c.Password = "penguin"
7070

7171
uri := c.GetDBUri("test")
72-
test.S(t).ExpectEquals(uri, "gromit:penguin@tcp(myhost:3306)/test?interpolateParams=true&autocommit=true&charset=utf8mb4,utf8,latin1&tls=false")
72+
test.S(t).ExpectEquals(uri, "gromit:penguin@tcp(myhost:3306)/test?timeout=0.000000s&readTimeout=0.000000s&writeTimeout=0.000000s&interpolateParams=true&autocommit=true&charset=utf8mb4,utf8,latin1&tls=false")
7373
}
7474

7575
func TestGetDBUriWithTLSSetup(t *testing.T) {
@@ -80,5 +80,5 @@ func TestGetDBUriWithTLSSetup(t *testing.T) {
8080
c.tlsConfig = &tls.Config{}
8181

8282
uri := c.GetDBUri("test")
83-
test.S(t).ExpectEquals(uri, "gromit:penguin@tcp(myhost:3306)/test?interpolateParams=true&autocommit=true&charset=utf8mb4,utf8,latin1&tls=ghost")
83+
test.S(t).ExpectEquals(uri, "gromit:penguin@tcp(myhost:3306)/test?timeout=0.000000s&readTimeout=0.000000s&writeTimeout=0.000000s&interpolateParams=true&autocommit=true&charset=utf8mb4,utf8,latin1&tls=ghost")
8484
}

0 commit comments

Comments
 (0)