This is an automated email from the ASF dual-hosted git repository.

zhonghongsheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new fcd8dcc  refactor: optimize cancel backup (#468)
fcd8dcc is described below

commit fcd8dcc79109c2bd67e8df7a1eb880b60d344c6b
Author: liyao <[email protected]>
AuthorDate: Mon Nov 20 09:45:32 2023 +0800

    refactor: optimize cancel backup (#468)
---
 pitr/cli/internal/cmd/backup.go      | 80 +++++++++++++++++++++++-------------
 pitr/cli/internal/cmd/backup_test.go |  4 +-
 2 files changed, 54 insertions(+), 30 deletions(-)

diff --git a/pitr/cli/internal/cmd/backup.go b/pitr/cli/internal/cmd/backup.go
index 4340a30..3d8eb9e 100644
--- a/pitr/cli/internal/cmd/backup.go
+++ b/pitr/cli/internal/cmd/backup.go
@@ -109,8 +109,11 @@ func init() {
 // 7. Double check backups all finished
 // nolint:gocognit
 func backup() error {
-       var err error
-       var lsBackup *model.LsBackup
+       var (
+               err      error
+               lsBackup *model.LsBackup
+               cancel   bool
+       )
        proxy, err := pkg.NewShardingSphereProxy(Username, Password, 
pkg.DefaultDBName, Host, Port)
        if err != nil {
                return xerr.NewCliErr(fmt.Sprintf("Connect shardingsphere proxy 
failed, err: %s", err))
@@ -123,14 +126,20 @@ func backup() error {
 
        defer func() {
                if err != nil {
-                       logging.Warn("Try to unlock cluster ...")
+                       if !cancel {
+                               logging.Warn("Try to unlock cluster ...")
+                       }
                        if err := proxy.Unlock(); err != nil {
                                logging.Error(fmt.Sprintf("Since backup failed, 
try to unlock cluster, but still failed. err: %s", err))
                        }
 
                        if lsBackup != nil {
-                               logging.Warn("Try to delete backup data ...")
-                               deleteBackupFiles(ls, lsBackup)
+                               if cancel {
+                                       deleteBackupFiles(ls, lsBackup, 
deleteModeQuiet)
+                               } else {
+                                       logging.Warn("Try to delete backup data 
...")
+                                       deleteBackupFiles(ls, lsBackup, 
deleteModeNormal)
+                               }
                        }
                }
        }()
@@ -168,6 +177,7 @@ func backup() error {
        prompt := fmt.Sprintln(backupPromptFmt)
        err = promptutil.GetUserApproveInTerminal(prompt)
        if err != nil {
+               cancel = true
                return xerr.NewCliErr(fmt.Sprintf("%s", err))
        }
 
@@ -436,7 +446,14 @@ func doCheck(as pkg.IAgentServer, sn *model.StorageNode, 
backupID string, retrie
        return backupInfo.Status, nil
 }
 
-func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup *model.LsBackup) {
+type deleteMode int
+
+const (
+       deleteModeNormal deleteMode = iota
+       deleteModeQuiet
+)
+
+func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup *model.LsBackup, m 
deleteMode) {
        var (
                dataNodeMap = make(map[string]*model.DataNode)
                totalNum    = len(lsBackup.SsBackup.StorageNodes)
@@ -458,7 +475,9 @@ func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup 
*model.LsBackup) {
                sn := sn
                dn, ok := dataNodeMap[sn.IP]
                if !ok {
-                       logging.Warn(fmt.Sprintf("SKIPPED! data node %s:%d not 
found in backup info.", sn.IP, sn.Port))
+                       if m != deleteModeQuiet {
+                               logging.Warn(fmt.Sprintf("SKIPPED! data node 
%s:%d not found in backup info.", sn.IP, sn.Port))
+                       }
                        continue
                }
                as := pkg.NewAgentServer(fmt.Sprintf("%s:%d", 
convertLocalhost(sn.IP), AgentPort))
@@ -466,36 +485,41 @@ func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup 
*model.LsBackup) {
                go doDelete(as, sn, dn, resultCh, pw)
        }
 
-       time.Sleep(time.Millisecond * 100)
-       for pw.IsRenderInProgress() {
-               if pw.LengthActive() == 0 {
-                       pw.Stop()
-               }
+       if m != deleteModeQuiet {
+
                time.Sleep(time.Millisecond * 100)
-       }
+               for pw.IsRenderInProgress() {
+                       if pw.LengthActive() == 0 {
+                               pw.Stop()
+                       }
+                       time.Sleep(time.Millisecond * 100)
+               }
 
-       close(resultCh)
+               close(resultCh)
 
-       t := table.NewWriter()
-       t.SetOutputMirror(os.Stdout)
-       t.SetTitle("Delete Backup Files Result")
-       t.AppendHeader(table.Row{"#", "Node IP", "Node Port", "Result", 
"Message"})
-       t.SetColumnConfigs([]table.ColumnConfig{{Number: 5, WidthMax: 50}})
-
-       idx := 0
-       for result := range resultCh {
-               idx++
-               t.AppendRow([]interface{}{idx, result.IP, result.Port, 
result.Status, result.Msg})
-               t.AppendSeparator()
-       }
+               t := table.NewWriter()
+               t.SetOutputMirror(os.Stdout)
+               t.SetTitle("Delete Backup Files Result")
+               t.AppendHeader(table.Row{"#", "Node IP", "Node Port", "Result", 
"Message"})
+               t.SetColumnConfigs([]table.ColumnConfig{{Number: 5, WidthMax: 
50}})
 
-       t.Render()
+               idx := 0
+               for result := range resultCh {
+                       idx++
+                       t.AppendRow([]interface{}{idx, result.IP, result.Port, 
result.Status, result.Msg})
+                       t.AppendSeparator()
+               }
+
+               t.Render()
+       }
 
        if err := ls.DeleteByName(filename); err != nil {
                logging.Warn("Delete backup info file failed")
        }
 
-       logging.Info("Delete backup files finished")
+       if m != deleteModeQuiet {
+               logging.Info("Delete backup files finished")
+       }
 }
 
 func doDelete(as pkg.IAgentServer, sn *model.StorageNode, dn *model.DataNode, 
resultCh chan *model.DeleteBackupResult, pw progress.Writer) {
diff --git a/pitr/cli/internal/cmd/backup_test.go 
b/pitr/cli/internal/cmd/backup_test.go
index 6c42400..65ab690 100644
--- a/pitr/cli/internal/cmd/backup_test.go
+++ b/pitr/cli/internal/cmd/backup_test.go
@@ -440,7 +440,7 @@ var _ = Describe("test backup mock", func() {
 
                It("should delete failed", func() {
                        
ls.EXPECT().DeleteByName(gomock.Any()).Return(errors.New("failed"))
-                       deleteBackupFiles(ls, bak)
+                       deleteBackupFiles(ls, bak, deleteModeNormal)
                })
 
                It("should delete success", func() {
@@ -454,7 +454,7 @@ var _ = Describe("test backup mock", func() {
                        defer ctrl.Finish()
                        as.EXPECT().DeleteBackup(gomock.Any()).Return(nil)
                        ls.EXPECT().DeleteByName(gomock.Any()).Return(nil)
-                       deleteBackupFiles(ls, bak)
+                       deleteBackupFiles(ls, bak, deleteModeNormal)
                })
        })
 })

Reply via email to