supporting --force-named-cut-over
- when given, user _must_ specify table name and of course table name must match migrated table
This commit is contained in:
parent
0a8be1dd22
commit
e5e0444cc6
@ -92,6 +92,7 @@ type MigrationContext struct {
|
|||||||
criticalLoad LoadMap
|
criticalLoad LoadMap
|
||||||
PostponeCutOverFlagFile string
|
PostponeCutOverFlagFile string
|
||||||
CutOverLockTimeoutSeconds int64
|
CutOverLockTimeoutSeconds int64
|
||||||
|
ForceNamedCutOverCommand bool
|
||||||
PanicFlagFile string
|
PanicFlagFile string
|
||||||
HooksPath string
|
HooksPath string
|
||||||
HooksHintMessage string
|
HooksHintMessage string
|
||||||
|
@ -71,6 +71,7 @@ func main() {
|
|||||||
flag.BoolVar(&migrationContext.InitiallyDropOldTable, "initially-drop-old-table", false, "Drop a possibly existing OLD table (remains from a previous run?) before beginning operation. Default is to panic and abort if such table exists")
|
flag.BoolVar(&migrationContext.InitiallyDropOldTable, "initially-drop-old-table", false, "Drop a possibly existing OLD table (remains from a previous run?) before beginning operation. Default is to panic and abort if such table exists")
|
||||||
flag.BoolVar(&migrationContext.InitiallyDropGhostTable, "initially-drop-ghost-table", false, "Drop a possibly existing Ghost table (remains from a previous run?) before beginning operation. Default is to panic and abort if such table exists")
|
flag.BoolVar(&migrationContext.InitiallyDropGhostTable, "initially-drop-ghost-table", false, "Drop a possibly existing Ghost table (remains from a previous run?) before beginning operation. Default is to panic and abort if such table exists")
|
||||||
cutOver := flag.String("cut-over", "atomic", "choose cut-over type (default|atomic, two-step)")
|
cutOver := flag.String("cut-over", "atomic", "choose cut-over type (default|atomic, two-step)")
|
||||||
|
flag.BoolVar(&migrationContext.ForceNamedCutOverCommand, "force-named-cut-over", false, "When true, the 'unpostpone|cut-over' interactive command must name the migrated table")
|
||||||
|
|
||||||
flag.BoolVar(&migrationContext.SwitchToRowBinlogFormat, "switch-to-rbr", false, "let this tool automatically switch binary log format to 'ROW' on the replica, if needed. The format will NOT be switched back. I'm too scared to do that, and wish to protect you if you happen to execute another migration while this one is running")
|
flag.BoolVar(&migrationContext.SwitchToRowBinlogFormat, "switch-to-rbr", false, "let this tool automatically switch binary log format to 'ROW' on the replica, if needed. The format will NOT be switched back. I'm too scared to do that, and wish to protect you if you happen to execute another migration while this one is running")
|
||||||
flag.BoolVar(&migrationContext.AssumeRBR, "assume-rbr", false, "set to 'true' when you know for certain your server uses 'ROW' binlog_format. gh-ost is unable to tell, event after reading binlog_format, whether the replication process does indeed use 'ROW', and restarts replication to be certain RBR setting is applied. Such operation requires SUPER privileges which you might not have. Setting this flag avoids restarting replication and you can proceed to use gh-ost without SUPER privileges")
|
flag.BoolVar(&migrationContext.AssumeRBR, "assume-rbr", false, "set to 'true' when you know for certain your server uses 'ROW' binlog_format. gh-ost is unable to tell, event after reading binlog_format, whether the replication process does indeed use 'ROW', and restarts replication to be certain RBR setting is applied. Such operation requires SUPER privileges which you might not have. Setting this flag avoids restarting replication and you can proceed to use gh-ost without SUPER privileges")
|
||||||
|
@ -231,12 +231,14 @@ help # This message
|
|||||||
}
|
}
|
||||||
case "unpostpone", "no-postpone", "cut-over":
|
case "unpostpone", "no-postpone", "cut-over":
|
||||||
{
|
{
|
||||||
if arg != "" {
|
if arg == "" && this.migrationContext.ForceNamedCutOverCommand {
|
||||||
if arg != this.migrationContext.OriginalTableName {
|
err := fmt.Errorf("User commanded 'unpostpone' without specifying table name, but --force-named-cut-over is set")
|
||||||
// User exlpicitly provided table name. This is a courtesy protection mechanism
|
return NoPrintStatusRule, err
|
||||||
err := fmt.Errorf("User commanded 'unpostpone' on %s, but migrated table is %s; ingoring request.", arg, this.migrationContext.OriginalTableName)
|
}
|
||||||
return NoPrintStatusRule, err
|
if arg != "" && arg != this.migrationContext.OriginalTableName {
|
||||||
}
|
// User exlpicitly provided table name. This is a courtesy protection mechanism
|
||||||
|
err := fmt.Errorf("User commanded 'unpostpone' on %s, but migrated table is %s; ingoring request.", arg, this.migrationContext.OriginalTableName)
|
||||||
|
return NoPrintStatusRule, err
|
||||||
}
|
}
|
||||||
if atomic.LoadInt64(&this.migrationContext.IsPostponingCutOver) > 0 {
|
if atomic.LoadInt64(&this.migrationContext.IsPostponingCutOver) > 0 {
|
||||||
atomic.StoreInt64(&this.migrationContext.UserCommandedUnpostponeFlag, 1)
|
atomic.StoreInt64(&this.migrationContext.UserCommandedUnpostponeFlag, 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user