Merge pull request #10142 from Lyndon-Li/upload-progerss-interval

Upload progress every 10s
This commit is contained in:
Xun Jiang/Bruce Jiang
2026-08-03 16:00:32 +08:00
committed by GitHub
+20 -7
View File
@@ -26,6 +26,7 @@ import (
"strconv"
"strings"
"sync"
"time"
"github.com/cockroachdb/errors"
"github.com/sirupsen/logrus"
@@ -62,10 +63,11 @@ type Uploader interface {
}
type blockUploader struct {
ctx context.Context
repoWriter udmrepo.BackupRepo
progress uploader.ProgressUpdater
log logrus.FieldLogger
ctx context.Context
repoWriter udmrepo.BackupRepo
progress uploader.ProgressUpdater
log logrus.FieldLogger
lastProgressUpdate time.Time
}
func NewUploader(ctx context.Context, repoWriter udmrepo.BackupRepo, progress uploader.ProgressUpdater, log logrus.FieldLogger) Uploader {
@@ -198,6 +200,17 @@ func (blkup *blockUploader) backupObject(dev *os.File, dest udmrepo.ObjectWriter
return id, backupSize, objectSize, err
}
func (blkup *blockUploader) UpdateProgress(p *uploader.Progress) {
if blkup.progress == nil {
return
}
if time.Since(blkup.lastProgressUpdate) >= 10*time.Second || p.BytesDone == p.TotalBytes {
blkup.progress.UpdateProgress(p)
blkup.lastProgressUpdate = time.Now()
}
}
type readResult struct {
buffer []byte
offset int64
@@ -233,7 +246,7 @@ func (blkup *blockUploader) backupData(reader io.ReaderAt, writer udmrepo.Object
go func() {
defer wg.Done()
defer close(quit)
written, lastPos, writeErr = backupWriteProc(blkup.ctx, writer, resultChan, list, aligned, totalCount, int(blockSize), blkup.progress)
written, lastPos, writeErr = backupWriteProc(blkup.ctx, writer, resultChan, list, aligned, totalCount, int(blockSize), blkup)
}()
wg.Wait()
@@ -250,7 +263,7 @@ func (blkup *blockUploader) backupData(reader io.ReaderAt, writer udmrepo.Object
written += s
blkup.progress.UpdateProgress(&uploader.Progress{BytesDone: aligned, TotalBytes: aligned})
blkup.UpdateProgress(&uploader.Progress{BytesDone: aligned, TotalBytes: aligned})
}
return written, aligned, nil
@@ -419,7 +432,7 @@ func (blkup *blockUploader) restoreData(reader io.ReadSeeker, dest *os.File, bit
go func() {
defer wg.Done()
defer close(quit)
written, writeErr = restoreWriteProc(blkup.ctx, dest, resultChan, list, totalLength, totalCount, int(blockSize), destPath, blkup.progress, blkup.log)
written, writeErr = restoreWriteProc(blkup.ctx, dest, resultChan, list, totalLength, totalCount, int(blockSize), destPath, blkup, blkup.log)
}()
wg.Wait()