Skip to content

Commit 61c7e18

Browse files
author
Shlomi Noach
authored
Merge pull request #176 from github/interactive-sup
interactive command: sup
2 parents e6a02d8 + 9752179 commit 61c7e18

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

doc/interactive-commands.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ Both interfaces may serve at the same time. Both respond to simple text command,
1515
### Known commands
1616

1717
- `help`: shows a brief list of available commands
18-
- `status`: returns a status summary of migration progress and configuration
19-
replication lag on to determine throttling
18+
- `status`: returns a detailed status summary of migration progress and configuration
19+
- `sup`: returns a brief status summary of migration progress
2020
- `chunk-size=<newsize>`: modify the `chunk-size`; applies on next running copy-iteration
2121
- `max-lag-millis=<max-lag>`: modify the maximum replication lag threshold (milliseconds, minimum value is `1000`, i.e. 1 second)
2222
- `max-load=<max-load-thresholds>`: modify the `max-load` config; applies on next running copy-iteration

go/logic/migrator.go

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ const (
4343
type PrintStatusRule int
4444

4545
const (
46-
HeuristicPrintStatusRule PrintStatusRule = iota
47-
ForcePrintStatusRule = iota
48-
ForcePrintStatusAndHint = iota
46+
HeuristicPrintStatusRule PrintStatusRule = iota
47+
ForcePrintStatusRule = iota
48+
ForcePrintStatusOnlyRule = iota
49+
ForcePrintStatusAndHintRule = iota
4950
)
5051

5152
// Migrator is the main schema migration flow manager.
@@ -522,7 +523,7 @@ func (this *Migrator) waitForEventsUpToLock() (err error) {
522523
waitForEventsUpToLockDuration := time.Since(waitForEventsUpToLockStartTime)
523524

524525
log.Infof("Done waiting for events up to lock; duration=%+v", waitForEventsUpToLockDuration)
525-
this.printStatus(ForcePrintStatusAndHint)
526+
this.printStatus(ForcePrintStatusAndHintRule)
526527

527528
return nil
528529
}
@@ -662,7 +663,8 @@ func (this *Migrator) onServerCommand(command string, writer *bufio.Writer) (err
662663
case "help":
663664
{
664665
fmt.Fprintln(writer, `available commands:
665-
status # Print a status message
666+
status # Print a detailed status message
667+
sup # Print a short status message
666668
chunk-size=<newsize> # Set a new chunk-size
667669
nice-ratio=<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, ...)
668670
critical-load=<load> # Set a new set of max-load thresholds
@@ -678,16 +680,18 @@ panic # panic and quit without cleanup
678680
help # This message
679681
`)
680682
}
683+
case "sup":
684+
this.printStatus(ForcePrintStatusOnlyRule, writer)
681685
case "info", "status":
682-
this.printStatus(ForcePrintStatusAndHint, writer)
686+
this.printStatus(ForcePrintStatusAndHintRule, writer)
683687
case "chunk-size":
684688
{
685689
if chunkSize, err := strconv.Atoi(arg); err != nil {
686690
fmt.Fprintf(writer, "%s\n", err.Error())
687691
return log.Errore(err)
688692
} else {
689693
this.migrationContext.SetChunkSize(int64(chunkSize))
690-
this.printStatus(ForcePrintStatusAndHint, writer)
694+
this.printStatus(ForcePrintStatusAndHintRule, writer)
691695
}
692696
}
693697
case "max-lag-millis":
@@ -697,13 +701,13 @@ help # This message
697701
return log.Errore(err)
698702
} else {
699703
this.migrationContext.SetMaxLagMillisecondsThrottleThreshold(int64(maxLagMillis))
700-
this.printStatus(ForcePrintStatusAndHint, writer)
704+
this.printStatus(ForcePrintStatusAndHintRule, writer)
701705
}
702706
}
703707
case "replication-lag-query":
704708
{
705709
this.migrationContext.SetReplicationLagQuery(arg)
706-
this.printStatus(ForcePrintStatusAndHint, writer)
710+
this.printStatus(ForcePrintStatusAndHintRule, writer)
707711
}
708712
case "nice-ratio":
709713
{
@@ -712,7 +716,7 @@ help # This message
712716
return log.Errore(err)
713717
} else {
714718
this.migrationContext.SetNiceRatio(niceRatio)
715-
this.printStatus(ForcePrintStatusAndHint, writer)
719+
this.printStatus(ForcePrintStatusAndHintRule, writer)
716720
}
717721
}
718722
case "max-load":
@@ -721,21 +725,21 @@ help # This message
721725
fmt.Fprintf(writer, "%s\n", err.Error())
722726
return log.Errore(err)
723727
}
724-
this.printStatus(ForcePrintStatusAndHint, writer)
728+
this.printStatus(ForcePrintStatusAndHintRule, writer)
725729
}
726730
case "critical-load":
727731
{
728732
if err := this.migrationContext.ReadCriticalLoad(arg); err != nil {
729733
fmt.Fprintf(writer, "%s\n", err.Error())
730734
return log.Errore(err)
731735
}
732-
this.printStatus(ForcePrintStatusAndHint, writer)
736+
this.printStatus(ForcePrintStatusAndHintRule, writer)
733737
}
734738
case "throttle-query":
735739
{
736740
this.migrationContext.SetThrottleQuery(arg)
737741
fmt.Fprintf(writer, throttleHint)
738-
this.printStatus(ForcePrintStatusAndHint, writer)
742+
this.printStatus(ForcePrintStatusAndHintRule, writer)
739743
}
740744
case "throttle-control-replicas":
741745
{
@@ -744,13 +748,13 @@ help # This message
744748
return log.Errore(err)
745749
}
746750
fmt.Fprintf(writer, "%s\n", this.migrationContext.GetThrottleControlReplicaKeys().ToCommaDelimitedList())
747-
this.printStatus(ForcePrintStatusAndHint, writer)
751+
this.printStatus(ForcePrintStatusAndHintRule, writer)
748752
}
749753
case "throttle", "pause", "suspend":
750754
{
751755
atomic.StoreInt64(&this.migrationContext.ThrottleCommandedByUser, 1)
752756
fmt.Fprintf(writer, throttleHint)
753-
this.printStatus(ForcePrintStatusAndHint, writer)
757+
this.printStatus(ForcePrintStatusAndHintRule, writer)
754758
}
755759
case "no-throttle", "unthrottle", "resume", "continue":
756760
{
@@ -840,7 +844,7 @@ func (this *Migrator) initiateInspector() (err error) {
840844

841845
// initiateStatus sets and activates the printStatus() ticker
842846
func (this *Migrator) initiateStatus() error {
843-
this.printStatus(ForcePrintStatusAndHint)
847+
this.printStatus(ForcePrintStatusAndHintRule)
844848
statusTick := time.Tick(1 * time.Second)
845849
for range statusTick {
846850
go this.printStatus(HeuristicPrintStatusRule)
@@ -949,9 +953,12 @@ func (this *Migrator) printStatus(rule PrintStatusRule, writers ...io.Writer) {
949953

950954
// Before status, let's see if we should print a nice reminder for what exactly we're doing here.
951955
shouldPrintMigrationStatusHint := (elapsedSeconds%600 == 0)
952-
if rule == ForcePrintStatusAndHint {
956+
if rule == ForcePrintStatusAndHintRule {
953957
shouldPrintMigrationStatusHint = true
954958
}
959+
if rule == ForcePrintStatusOnlyRule {
960+
shouldPrintMigrationStatusHint = false
961+
}
955962
if shouldPrintMigrationStatusHint {
956963
this.printMigrationStatusHint(writers...)
957964
}
@@ -992,7 +999,7 @@ func (this *Migrator) printStatus(rule PrintStatusRule, writers ...io.Writer) {
992999
} else {
9931000
shouldPrintStatus = (elapsedSeconds%30 == 0)
9941001
}
995-
if rule == ForcePrintStatusRule || rule == ForcePrintStatusAndHint {
1002+
if rule == ForcePrintStatusRule || rule == ForcePrintStatusAndHintRule {
9961003
shouldPrintStatus = true
9971004
}
9981005
if !shouldPrintStatus {

0 commit comments

Comments
 (0)