From 2bfc672b030a0ede1edc192dc53ea0d67b82c886 Mon Sep 17 00:00:00 2001 From: Cyprian Nosek Date: Wed, 28 Dec 2016 10:25:42 +0100 Subject: [PATCH 1/2] Add possibility to set serverId as gh-ost argument Signed-off-by: Cyprian Nosek --- go/base/context.go | 1 + go/binlog/gomysql_reader.go | 9 +++++---- go/cmd/gh-ost/main.go | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/go/base/context.go b/go/base/context.go index ef25eb0..0f74f97 100644 --- a/go/base/context.go +++ b/go/base/context.go @@ -123,6 +123,7 @@ type MigrationContext struct { InitiallyDropOldTable bool InitiallyDropGhostTable bool CutOverType CutOver + ReplicaServerId uint Hostname string AssumeMasterHostname string diff --git a/go/binlog/gomysql_reader.go b/go/binlog/gomysql_reader.go index 6d338ca..7b57a99 100644 --- a/go/binlog/gomysql_reader.go +++ b/go/binlog/gomysql_reader.go @@ -9,6 +9,7 @@ import ( "fmt" "sync" + "github.com/github/gh-ost/go/base" "github.com/github/gh-ost/go/mysql" "github.com/github/gh-ost/go/sql" @@ -17,10 +18,6 @@ import ( "github.com/siddontang/go-mysql/replication" ) -const ( - serverId = 99999 -) - type GoMySQLReader struct { connectionConfig *mysql.ConnectionConfig binlogSyncer *replication.BinlogSyncer @@ -28,6 +25,7 @@ type GoMySQLReader struct { currentCoordinates mysql.BinlogCoordinates currentCoordinatesMutex *sync.Mutex LastAppliedRowsEventHint mysql.BinlogCoordinates + MigrationContext *base.MigrationContext } func NewGoMySQLReader(connectionConfig *mysql.ConnectionConfig) (binlogReader *GoMySQLReader, err error) { @@ -37,7 +35,10 @@ func NewGoMySQLReader(connectionConfig *mysql.ConnectionConfig) (binlogReader *G currentCoordinatesMutex: &sync.Mutex{}, binlogSyncer: nil, binlogStreamer: nil, + MigrationContext: base.GetMigrationContext(), } + + serverId := uint32(binlogReader.MigrationContext.ReplicaServerId) binlogReader.binlogSyncer = replication.NewBinlogSyncer(serverId, "mysql") return binlogReader, err diff --git a/go/cmd/gh-ost/main.go b/go/cmd/gh-ost/main.go index bb8b8d2..6491f57 100644 --- a/go/cmd/gh-ost/main.go +++ b/go/cmd/gh-ost/main.go @@ -104,6 +104,8 @@ func main() { flag.StringVar(&migrationContext.HooksPath, "hooks-path", "", "directory where hook files are found (default: empty, ie. hooks disabled). Hook files found on this path, and conforming to hook naming conventions will be executed") flag.StringVar(&migrationContext.HooksHintMessage, "hooks-hint", "", "arbitrary message to be injected to hooks via GH_OST_HOOKS_HINT, for your convenience") + flag.UintVar(&migrationContext.ReplicaServerId, "replica-server-id", 99999, "server id used by gh-ost process. Default: 99999") + maxLoad := flag.String("max-load", "", "Comma delimited status-name=threshold. e.g: 'Threads_running=100,Threads_connected=500'. When status exceeds threshold, app throttles writes") criticalLoad := flag.String("critical-load", "", "Comma delimited status-name=threshold, same format as --max-load. When status exceeds threshold, app panics and quits") flag.Int64Var(&migrationContext.CriticalLoadIntervalMilliseconds, "critical-load-interval-millis", 0, "When 0, migration immediately bails out upon meeting critical-load. When non-zero, a second check is done after given interval, and migration only bails out if 2nd check still meets critical load") From 9dd8d858a17c600152c8b1a4bd97fc6e0c2b61de Mon Sep 17 00:00:00 2001 From: Shlomi Noach Date: Thu, 29 Dec 2016 17:39:44 +0200 Subject: [PATCH 2/2] cli: --check-flag --- go/cmd/gh-ost/main.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/go/cmd/gh-ost/main.go b/go/cmd/gh-ost/main.go index 6491f57..fdfa919 100644 --- a/go/cmd/gh-ost/main.go +++ b/go/cmd/gh-ost/main.go @@ -115,8 +115,13 @@ func main() { stack := flag.Bool("stack", false, "add stack trace upon error") help := flag.Bool("help", false, "Display usage") version := flag.Bool("version", false, "Print version & exit") + checkFlag := flag.Bool("check-flag", false, "Check if another flag exists/supported. This allows for cross-version scripting. Exits with 0 when all additional provided flags exist, nonzero otherwise. You must provide (dummy) values for flags that require a value. Example: gh-ost --check-flag --cut-over-lock-timeout-seconds --nice-ratio 0") + flag.Parse() + if *checkFlag { + return + } if *help { fmt.Fprintf(os.Stderr, "Usage of gh-ost:\n") flag.PrintDefaults()