Skip to content

Commit bba51f4

Browse files
committed
feat(upload): 支持重启后恢复上传任务,优化临时文件验证和日志记录
1 parent dc501f0 commit bba51f4

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

internal/fs/sliceup.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
5454
"dst_path": req.Path,
5555
"name": req.Name,
5656
"size": req.Size,
57-
"status": tables.SliceUploadStatusUploading, // 只查找正在进行中的任务
57+
"status": []int{
58+
tables.SliceUploadStatusWaiting, // 等待状态(重启后恢复)
59+
tables.SliceUploadStatusUploading, // 上传中状态
60+
},
5861
}
5962
if req.Hash.Md5 != "" {
6063
wh["hash_md5"] = req.Hash.Md5
@@ -73,7 +76,7 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
7376
}
7477

7578
if su.TaskID != "" { // 找到未完成的上传任务,支持断点续传
76-
// 验证临时文件是否仍然存在(重启后可能被清理
79+
// 验证临时文件是否仍然存在(仅对非原生分片上传
7780
if su.TmpFile != "" {
7881
if _, err := os.Stat(su.TmpFile); os.IsNotExist(err) {
7982
// 临时文件丢失,清理数据库记录,重新开始
@@ -83,11 +86,12 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
8386
}
8487
// 继续创建新任务
8588
} else {
86-
// 临时文件存在,可以继续断点续传
89+
// Temporary file exists, can continue resumable upload (traditional upload mode)
8790
session := &SliceUploadSession{SliceUpload: su}
8891
m.cache.Store(su.TaskID, session)
89-
log.Infof("Resuming slice upload after restart: %s, completed slices: %d/%d",
90-
su.TaskID, tables.CountUploadedSlices(su.SliceUploadStatus), su.SliceCnt)
92+
completedSlices := tables.CountUploadedSlices(su.SliceUploadStatus)
93+
log.Infof("Resuming file-based slice upload: %s, completed: %d/%d",
94+
su.TaskID, completedSlices, su.SliceCnt)
9195
return &reqres.PreupResp{
9296
TaskID: su.TaskID,
9397
SliceSize: su.SliceSize,
@@ -96,10 +100,12 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
96100
}, nil
97101
}
98102
} else {
99-
// 原生分片上传(如123open/baidu),无需临时文件
103+
// Native slice upload, relying on frontend intelligent retry and state sync
100104
session := &SliceUploadSession{SliceUpload: su}
101105
m.cache.Store(su.TaskID, session)
102-
log.Infof("Resuming native slice upload after restart: %s", su.TaskID)
106+
completedSlices := tables.CountUploadedSlices(su.SliceUploadStatus)
107+
log.Infof("Resuming native slice upload: %s, completed: %d/%d, relying on frontend sync",
108+
su.TaskID, completedSlices, su.SliceCnt)
103109
return &reqres.PreupResp{
104110
TaskID: su.TaskID,
105111
SliceSize: su.SliceSize,
@@ -259,10 +265,14 @@ func (m *SliceUploadManager) UploadSlice(ctx context.Context, storage driver.Dri
259265
// 根据存储类型处理分片上传
260266
switch s := storage.(type) {
261267
case driver.ISliceUpload:
268+
// Native slice upload: directly pass stream data, let frontend handle retry and recovery
262269
if err := s.SliceUpload(ctx, session.SliceUpload, req.SliceNum, reader); err != nil {
263-
log.Error("SliceUpload error", req, err)
264-
return err
270+
log.Errorf("Native slice upload failed - TaskID: %s, SliceNum: %d, Error: %v",
271+
req.TaskID, req.SliceNum, err)
272+
return errors.WithMessagef(err, "slice %d upload failed", req.SliceNum)
265273
}
274+
log.Debugf("Native slice upload success - TaskID: %s, SliceNum: %d",
275+
req.TaskID, req.SliceNum)
266276

267277
default: //其他网盘先缓存到本地
268278
if err := session.ensureTmpFile(); err != nil {

0 commit comments

Comments
 (0)