From 9752179723964a6e39f1aff6056404c39ce1e133 Mon Sep 17 00:00:00 2001 From: Shlomi Noach Date: Fri, 19 Aug 2016 09:16:17 +0200 Subject: [PATCH] interactive command: sup --- doc/interactive-commands.md | 4 ++-- go/logic/migrator.go | 43 +++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/doc/interactive-commands.md b/doc/interactive-commands.md index 0c1ac95..5449627 100644 --- a/doc/interactive-commands.md +++ b/doc/interactive-commands.md @@ -15,8 +15,8 @@ Both interfaces may serve at the same time. Both respond to simple text command, ### Known commands - `help`: shows a brief list of available commands -- `status`: returns a status summary of migration progress and configuration -replication lag on to determine throttling +- `status`: returns a detailed status summary of migration progress and configuration +- `sup`: returns a brief status summary of migration progress - `chunk-size=`: modify the `chunk-size`; applies on next running copy-iteration - `max-lag-millis=`: modify the maximum replication lag threshold (milliseconds, minimum value is `1000`, i.e. 1 second) - `max-load=`: modify the `max-load` config; applies on next running copy-iteration diff --git a/go/logic/migrator.go b/go/logic/migrator.go index ae3eb7a..bb54cf0 100644 --- a/go/logic/migrator.go +++ b/go/logic/migrator.go @@ -43,9 +43,10 @@ const ( type PrintStatusRule int const ( - HeuristicPrintStatusRule PrintStatusRule = iota - ForcePrintStatusRule = iota - ForcePrintStatusAndHint = iota + HeuristicPrintStatusRule PrintStatusRule = iota + ForcePrintStatusRule = iota + ForcePrintStatusOnlyRule = iota + ForcePrintStatusAndHintRule = iota ) // Migrator is the main schema migration flow manager. @@ -522,7 +523,7 @@ func (this *Migrator) waitForEventsUpToLock() (err error) { waitForEventsUpToLockDuration := time.Since(waitForEventsUpToLockStartTime) log.Infof("Done waiting for events up to lock; duration=%+v", waitForEventsUpToLockDuration) - this.printStatus(ForcePrintStatusAndHint) + this.printStatus(ForcePrintStatusAndHintRule) return nil } @@ -662,7 +663,8 @@ func (this *Migrator) onServerCommand(command string, writer *bufio.Writer) (err case "help": { fmt.Fprintln(writer, `available commands: -status # Print a status message +status # Print a detailed status message +sup # Print a short status message chunk-size= # Set a new chunk-size nice-ratio= # Set a new nice-ratio, immediate sleep after each row-copy operation, float (examples: 0 is agrressive, 0.7 adds 70% runtime, 1.0 doubles runtime, 2.0 triples runtime, ...) critical-load= # Set a new set of max-load thresholds @@ -678,8 +680,10 @@ panic # panic and quit without cleanup help # This message `) } + case "sup": + this.printStatus(ForcePrintStatusOnlyRule, writer) case "info", "status": - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) case "chunk-size": { if chunkSize, err := strconv.Atoi(arg); err != nil { @@ -687,7 +691,7 @@ help # This message return log.Errore(err) } else { this.migrationContext.SetChunkSize(int64(chunkSize)) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } } case "max-lag-millis": @@ -697,13 +701,13 @@ help # This message return log.Errore(err) } else { this.migrationContext.SetMaxLagMillisecondsThrottleThreshold(int64(maxLagMillis)) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } } case "replication-lag-query": { this.migrationContext.SetReplicationLagQuery(arg) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } case "nice-ratio": { @@ -712,7 +716,7 @@ help # This message return log.Errore(err) } else { this.migrationContext.SetNiceRatio(niceRatio) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } } case "max-load": @@ -721,7 +725,7 @@ help # This message fmt.Fprintf(writer, "%s\n", err.Error()) return log.Errore(err) } - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } case "critical-load": { @@ -729,13 +733,13 @@ help # This message fmt.Fprintf(writer, "%s\n", err.Error()) return log.Errore(err) } - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } case "throttle-query": { this.migrationContext.SetThrottleQuery(arg) fmt.Fprintf(writer, throttleHint) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } case "throttle-control-replicas": { @@ -744,13 +748,13 @@ help # This message return log.Errore(err) } fmt.Fprintf(writer, "%s\n", this.migrationContext.GetThrottleControlReplicaKeys().ToCommaDelimitedList()) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } case "throttle", "pause", "suspend": { atomic.StoreInt64(&this.migrationContext.ThrottleCommandedByUser, 1) fmt.Fprintf(writer, throttleHint) - this.printStatus(ForcePrintStatusAndHint, writer) + this.printStatus(ForcePrintStatusAndHintRule, writer) } case "no-throttle", "unthrottle", "resume", "continue": { @@ -840,7 +844,7 @@ func (this *Migrator) initiateInspector() (err error) { // initiateStatus sets and activates the printStatus() ticker func (this *Migrator) initiateStatus() error { - this.printStatus(ForcePrintStatusAndHint) + this.printStatus(ForcePrintStatusAndHintRule) statusTick := time.Tick(1 * time.Second) for range statusTick { go this.printStatus(HeuristicPrintStatusRule) @@ -949,9 +953,12 @@ func (this *Migrator) printStatus(rule PrintStatusRule, writers ...io.Writer) { // Before status, let's see if we should print a nice reminder for what exactly we're doing here. shouldPrintMigrationStatusHint := (elapsedSeconds%600 == 0) - if rule == ForcePrintStatusAndHint { + if rule == ForcePrintStatusAndHintRule { shouldPrintMigrationStatusHint = true } + if rule == ForcePrintStatusOnlyRule { + shouldPrintMigrationStatusHint = false + } if shouldPrintMigrationStatusHint { this.printMigrationStatusHint(writers...) } @@ -992,7 +999,7 @@ func (this *Migrator) printStatus(rule PrintStatusRule, writers ...io.Writer) { } else { shouldPrintStatus = (elapsedSeconds%30 == 0) } - if rule == ForcePrintStatusRule || rule == ForcePrintStatusAndHint { + if rule == ForcePrintStatusRule || rule == ForcePrintStatusAndHintRule { shouldPrintStatus = true } if !shouldPrintStatus {