mirror of https://github.com/hashicorp/consul
agent: flush progress info to console during migrations
parent
2a6a0e663b
commit
78a80f3a57
|
@ -620,9 +620,45 @@ func (c *Command) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle progress info from the migrator utility. This will
|
||||||
|
// just dump out the current operation and progress every ~5
|
||||||
|
// percent progress.
|
||||||
|
doneCh := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
var lastOp string
|
||||||
|
var lastProgress float64
|
||||||
|
lastFlush := time.Now()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case update := <-m.ProgressCh:
|
||||||
|
switch {
|
||||||
|
case lastOp != update.Op:
|
||||||
|
lastProgress = update.Progress
|
||||||
|
lastOp = update.Op
|
||||||
|
c.Ui.Output(update.Op)
|
||||||
|
c.Ui.Info(fmt.Sprintf("%.2f%%", update.Progress))
|
||||||
|
|
||||||
|
case update.Progress-lastProgress >= 5:
|
||||||
|
fallthrough
|
||||||
|
|
||||||
|
case time.Now().Sub(lastFlush) > time.Second:
|
||||||
|
fallthrough
|
||||||
|
|
||||||
|
case update.Progress == 100:
|
||||||
|
lastFlush = time.Now()
|
||||||
|
lastProgress = update.Progress
|
||||||
|
c.Ui.Info(fmt.Sprintf("%.2f%%", update.Progress))
|
||||||
|
}
|
||||||
|
case <-doneCh:
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
c.Ui.Output("Starting raft data migration...")
|
c.Ui.Output("Starting raft data migration...")
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
migrated, err := m.Migrate()
|
migrated, err := m.Migrate()
|
||||||
|
close(doneCh)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to migrate raft data: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to migrate raft data: %s", err))
|
||||||
return 1
|
return 1
|
||||||
|
|
Loading…
Reference in New Issue