Skip to content

Commit c681f61

Browse files
Add --mysql-wait-timeout flag (#1401)
1 parent bc6cd55 commit c681f61

File tree

3 files changed

+9
-1
lines changed

3 files changed

+9
-1
lines changed

go/cmd/gh-ost/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func main() {
5151
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")
5252
flag.IntVar(&migrationContext.InspectorConnectionConfig.Key.Port, "port", 3306, "MySQL port (preferably a replica, not the master)")
5353
flag.Float64Var(&migrationContext.InspectorConnectionConfig.Timeout, "mysql-timeout", 0.0, "Connect, read and write timeout for MySQL")
54+
flag.Float64Var(&migrationContext.InspectorConnectionConfig.WaitTimeout, "mysql-wait-timeout", 0.0, "wait_timeout for MySQL sessions")
5455
flag.StringVar(&migrationContext.CliUser, "user", "", "MySQL user")
5556
flag.StringVar(&migrationContext.CliPassword, "password", "", "MySQL password")
5657
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: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type ConnectionConfig struct {
3131
Timeout float64
3232
TransactionIsolation string
3333
Charset string
34+
WaitTimeout float64
3435
}
3536

3637
func NewConnectionConfig() *ConnectionConfig {
@@ -51,6 +52,7 @@ func (this *ConnectionConfig) DuplicateCredentials(key InstanceKey) *ConnectionC
5152
Timeout: this.Timeout,
5253
TransactionIsolation: this.TransactionIsolation,
5354
Charset: this.Charset,
55+
WaitTimeout: this.WaitTimeout,
5456
}
5557
config.ImpliedKey = &config.Key
5658
return config
@@ -139,6 +141,9 @@ func (this *ConnectionConfig) GetDBUri(databaseName string) string {
139141
fmt.Sprintf("readTimeout=%fs", this.Timeout),
140142
fmt.Sprintf("writeTimeout=%fs", this.Timeout),
141143
}
144+
if this.WaitTimeout > 0 {
145+
connectionParams = append(connectionParams, fmt.Sprintf("wait_timeout=%fs", this.WaitTimeout))
146+
}
142147

143148
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", this.User, this.Password, hostname, this.Key.Port, databaseName, strings.Join(connectionParams, "&"))
144149
}

go/mysql/connection_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ func TestGetDBUri(t *testing.T) {
8282
c.User = "gromit"
8383
c.Password = "penguin"
8484
c.Timeout = 1.2345
85+
c.WaitTimeout = 0 // should be ignored
8586
c.TransactionIsolation = transactionIsolation
8687
c.Charset = "utf8mb4,utf8,latin1"
8788

@@ -95,10 +96,11 @@ func TestGetDBUriWithTLSSetup(t *testing.T) {
9596
c.User = "gromit"
9697
c.Password = "penguin"
9798
c.Timeout = 1.2345
99+
c.WaitTimeout = 60
98100
c.tlsConfig = &tls.Config{}
99101
c.TransactionIsolation = transactionIsolation
100102
c.Charset = "utf8mb4_general_ci,utf8_general_ci,latin1"
101103

102104
uri := c.GetDBUri("test")
103-
test.S(t).ExpectEquals(uri, `gromit:penguin@tcp(myhost:3306)/test?autocommit=true&interpolateParams=true&charset=utf8mb4_general_ci,utf8_general_ci,latin1&tls=ghost&transaction_isolation="REPEATABLE-READ"&timeout=1.234500s&readTimeout=1.234500s&writeTimeout=1.234500s`)
105+
test.S(t).ExpectEquals(uri, `gromit:penguin@tcp(myhost:3306)/test?autocommit=true&interpolateParams=true&charset=utf8mb4_general_ci,utf8_general_ci,latin1&tls=ghost&transaction_isolation="REPEATABLE-READ"&timeout=1.234500s&readTimeout=1.234500s&writeTimeout=1.234500s&wait_timeout=60.000000s`)
104106
}

0 commit comments

Comments
 (0)