in pitr/cli/internal/cmd/backup.go [427:487]
func deleteBackupFiles(ls pkg.ILocalStorage, lsBackup *model.LsBackup) {
var (
dataNodeMap = make(map[string]*model.DataNode)
totalNum = len(lsBackup.SsBackup.StorageNodes)
resultCh = make(chan *model.DeleteBackupResult, totalNum)
)
for _, dn := range lsBackup.DnList {
dataNodeMap[dn.IP] = dn
}
if totalNum == 0 {
logging.Info("No data node need to delete backup files")
return
}
pw := prettyoutput.NewPW(totalNum)
go pw.Render()
for _, sn := range lsBackup.SsBackup.StorageNodes {
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))
continue
}
as := pkg.NewAgentServer(fmt.Sprintf("%s:%d", convertLocalhost(sn.IP), AgentPort))
go doDelete(as, sn, dn, resultCh, pw)
}
time.Sleep(time.Millisecond * 100)
for pw.IsRenderInProgress() {
if pw.LengthActive() == 0 {
pw.Stop()
}
time.Sleep(time.Millisecond * 100)
}
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.Render()
if err := ls.DeleteByName(filename); err != nil {
logging.Warn("Delete backup info file failed")
}
logging.Info("Delete backup files finished")
}