Skip to content

Commit fcd8dcc

Browse files
authored
refactor: optimize cancel backup (#468)
1 parent 8675a64 commit fcd8dcc

2 files changed

Lines changed: 54 additions & 30 deletions

File tree

pitr/cli/internal/cmd/backup.go

Lines changed: 52 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,11 @@ func init() {
109109
// 7. Double check backups all finished
110110
// nolint:gocognit
111111
func backup() error {
112-
var err error
113-
var lsBackup *model.LsBackup
112+
var (
113+
err error
114+
lsBackup *model.LsBackup
115+
cancel bool
116+
)
114117
proxy, err := pkg.NewShardingSphereProxy(Username, Password, pkg.DefaultDBName, Host, Port)
115118
if err != nil {
116119
return xerr.NewCliErr(fmt.Sprintf("Connect shardingsphere proxy failed, err: %s", err))
@@ -123,14 +126,20 @@ func backup() error {
123126

124127
defer func() {
125128
if err != nil {
126-
logging.Warn("Try to unlock cluster ...")
129+
if !cancel {
130+
logging.Warn("Try to unlock cluster ...")
131+
}
127132
if err := proxy.Unlock(); err != nil {
128133
logging.Error(fmt.Sprintf("Since backup failed, try to unlock cluster, but still failed. err: %s", err))
129134
}
130135

131136
if lsBackup != nil {
132-
logging.Warn("Try to delete backup data ...")
133-
deleteBackupFiles(ls, lsBackup)
137+
if cancel {
138+
deleteBackupFiles(ls, lsBackup, deleteModeQuiet)
139+
} else {
140+
logging.Warn("Try to delete backup data ...")
141+
deleteBackupFiles(ls, lsBackup, deleteModeNormal)
142+
}
134143
}
135144
}
136145
}()
@@ -168,6 +177,7 @@ func backup() error {
168177
prompt := fmt.Sprintln(backupPromptFmt)
169178
err = promptutil.GetUserApproveInTerminal(prompt)
170179
if err != nil {
180+
cancel = true
171181
return xerr.NewCliErr(fmt.Sprintf("%s", err))
172182
}
173183

@@ -436,7 +446,14 @@ func doCheck(as pkg.IAgentServer, sn *model.StorageNode, backupID string, retrie
436446
return backupInfo.Status, nil
437447
}
438448

439-
func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup *model.LsBackup) {
449+
type deleteMode int
450+
451+
const (
452+
deleteModeNormal deleteMode = iota
453+
deleteModeQuiet
454+
)
455+
456+
func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup *model.LsBackup, m deleteMode) {
440457
var (
441458
dataNodeMap = make(map[string]*model.DataNode)
442459
totalNum = len(lsBackup.SsBackup.StorageNodes)
@@ -458,44 +475,51 @@ func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup *model.LsBackup) {
458475
sn := sn
459476
dn, ok := dataNodeMap[sn.IP]
460477
if !ok {
461-
logging.Warn(fmt.Sprintf("SKIPPED! data node %s:%d not found in backup info.", sn.IP, sn.Port))
478+
if m != deleteModeQuiet {
479+
logging.Warn(fmt.Sprintf("SKIPPED! data node %s:%d not found in backup info.", sn.IP, sn.Port))
480+
}
462481
continue
463482
}
464483
as := pkg.NewAgentServer(fmt.Sprintf("%s:%d", convertLocalhost(sn.IP), AgentPort))
465484

466485
go doDelete(as, sn, dn, resultCh, pw)
467486
}
468487

469-
time.Sleep(time.Millisecond * 100)
470-
for pw.IsRenderInProgress() {
471-
if pw.LengthActive() == 0 {
472-
pw.Stop()
473-
}
488+
if m != deleteModeQuiet {
489+
474490
time.Sleep(time.Millisecond * 100)
475-
}
491+
for pw.IsRenderInProgress() {
492+
if pw.LengthActive() == 0 {
493+
pw.Stop()
494+
}
495+
time.Sleep(time.Millisecond * 100)
496+
}
476497

477-
close(resultCh)
498+
close(resultCh)
478499

479-
t := table.NewWriter()
480-
t.SetOutputMirror(os.Stdout)
481-
t.SetTitle("Delete Backup Files Result")
482-
t.AppendHeader(table.Row{"#", "Node IP", "Node Port", "Result", "Message"})
483-
t.SetColumnConfigs([]table.ColumnConfig{{Number: 5, WidthMax: 50}})
484-
485-
idx := 0
486-
for result := range resultCh {
487-
idx++
488-
t.AppendRow([]interface{}{idx, result.IP, result.Port, result.Status, result.Msg})
489-
t.AppendSeparator()
490-
}
500+
t := table.NewWriter()
501+
t.SetOutputMirror(os.Stdout)
502+
t.SetTitle("Delete Backup Files Result")
503+
t.AppendHeader(table.Row{"#", "Node IP", "Node Port", "Result", "Message"})
504+
t.SetColumnConfigs([]table.ColumnConfig{{Number: 5, WidthMax: 50}})
491505

492-
t.Render()
506+
idx := 0
507+
for result := range resultCh {
508+
idx++
509+
t.AppendRow([]interface{}{idx, result.IP, result.Port, result.Status, result.Msg})
510+
t.AppendSeparator()
511+
}
512+
513+
t.Render()
514+
}
493515

494516
if err := ls.DeleteByName(filename); err != nil {
495517
logging.Warn("Delete backup info file failed")
496518
}
497519

498-
logging.Info("Delete backup files finished")
520+
if m != deleteModeQuiet {
521+
logging.Info("Delete backup files finished")
522+
}
499523
}
500524

501525
func doDelete(as pkg.IAgentServer, sn *model.StorageNode, dn *model.DataNode, resultCh chan *model.DeleteBackupResult, pw progress.Writer) {

pitr/cli/internal/cmd/backup_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ var _ = Describe("test backup mock", func() {
440440

441441
It("should delete failed", func() {
442442
ls.EXPECT().DeleteByName(gomock.Any()).Return(errors.New("failed"))
443-
deleteBackupFiles(ls, bak)
443+
deleteBackupFiles(ls, bak, deleteModeNormal)
444444
})
445445

446446
It("should delete success", func() {
@@ -454,7 +454,7 @@ var _ = Describe("test backup mock", func() {
454454
defer ctrl.Finish()
455455
as.EXPECT().DeleteBackup(gomock.Any()).Return(nil)
456456
ls.EXPECT().DeleteByName(gomock.Any()).Return(nil)
457-
deleteBackupFiles(ls, bak)
457+
deleteBackupFiles(ls, bak, deleteModeNormal)
458458
})
459459
})
460460
})

0 commit comments

Comments
 (0)