Skip to content
This repository was archived by the owner on Dec 20, 2024. It is now read-only.

Commit ac262d5

Browse files
authored
Merge pull request #1085 from Starnop/retry-report
refactor: handle errors gracefully
2 parents 9017881 + d64938d commit ac262d5

File tree

6 files changed

+34
-13
lines changed

6 files changed

+34
-13
lines changed

dfget/core/core.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,9 @@ func doDownload(cfg *config.Config, supernodeAPI api.SupernodeAPI,
213213
}
214214

215215
err := downloader.DoDownloadTimeout(getter, timeout)
216+
// report finished task to uploader regardless of the result of downloading from dragonfly
217+
reportFinishedTask(cfg, getter)
216218
if err == nil {
217-
// report finished task to uploader when success to download by dragonfly
218-
reportFinishedTask(cfg, getter)
219219
return nil
220220
}
221221

supernode/daemon/mgr/gc/gc_task.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,16 @@ func (gcm *Manager) gcCDNByTaskID(ctx context.Context, taskID string, full bool)
116116
}
117117

118118
func (gcm *Manager) gcTaskByTaskID(ctx context.Context, taskID string) {
119-
if err := gcm.progressMgr.DeleteTaskID(ctx, taskID); err != nil {
119+
taskInfo, err := gcm.taskMgr.Get(ctx, taskID)
120+
if err != nil {
121+
logrus.Errorf("gc task: failed to get task info(%s): %v", taskID, err)
122+
}
123+
124+
var pieceTotal int
125+
if taskInfo != nil {
126+
pieceTotal = int(taskInfo.PieceTotal)
127+
}
128+
if err := gcm.progressMgr.DeleteTaskID(ctx, taskID, pieceTotal); err != nil {
120129
logrus.Errorf("gc task: failed to gc progress info taskID(%s): %v", taskID, err)
121130
}
122131
if err := gcm.taskMgr.Delete(ctx, taskID); err != nil {

supernode/daemon/mgr/mock/mock_progress_mgr.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

supernode/daemon/mgr/progress/progress_delete.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,24 @@ package progress
1919
import (
2020
"context"
2121

22+
"github.com/dragonflyoss/Dragonfly/pkg/errortypes"
23+
2224
"github.com/sirupsen/logrus"
2325
)
2426

2527
// DeleteTaskID deletes the super progress with specified taskID.
26-
func (pm *Manager) DeleteTaskID(ctx context.Context, taskID string) (err error) {
28+
func (pm *Manager) DeleteTaskID(ctx context.Context, taskID string, pieceTotal int) (err error) {
2729
pm.superLoad.remove(taskID)
28-
return pm.superProgress.remove(taskID)
30+
pm.superProgress.remove(taskID)
31+
32+
for i := 0; i < pieceTotal; i++ {
33+
key, err := generatePieceProgressKey(taskID, i)
34+
if err != nil {
35+
return err
36+
}
37+
pm.pieceProgress.remove(key)
38+
}
39+
return nil
2940
}
3041

3142
// DeleteCID deletes the client progress with specified clientID.
@@ -81,9 +92,10 @@ func (pm *Manager) deletePeerIDByPieceNum(ctx context.Context, taskID string, pi
8192
// the peer no longer provides the service for the pieceNum of taskID.
8293
func (pm *Manager) deletePeerIDByPieceProgressKey(ctx context.Context, pieceProgressKey string, peerID string) error {
8394
ps, err := pm.pieceProgress.getAsPieceState(pieceProgressKey)
84-
if err != nil {
95+
if err != nil && !errortypes.IsDataNotFound(err) {
8596
return err
8697
}
8798

88-
return ps.delete(peerID)
99+
ps.delete(peerID)
100+
return nil
89101
}

supernode/daemon/mgr/progress_mgr.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ type ProgressMgr interface {
8888
UpdateSuperLoad(ctx context.Context, taskID string, delta, limit int32) (updated bool, err error)
8989

9090
// DeleteTaskID deletes the super progress with specified taskID.
91-
DeleteTaskID(ctx context.Context, taskID string) (err error)
91+
DeleteTaskID(ctx context.Context, taskID string, pieceTotal int) (err error)
9292

9393
// DeleteCID deletes the super progress with specified clientID.
9494
DeleteCID(ctx context.Context, clientID string) (err error)

supernode/daemon/mgr/scheduler/manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ func (sm *Manager) tryGetPID(ctx context.Context, taskID string, pieceNum int, s
260260

261261
func (sm *Manager) deletePeerIDByPieceNum(ctx context.Context, taskID string, pieceNum int, peerID string) {
262262
if err := sm.progressMgr.DeletePeerIDByPieceNum(ctx, taskID, pieceNum, peerID); err != nil {
263-
logrus.Warnf("scheduler: failed to delete the peerID %s for pieceNum %d of taskID: %s", peerID, pieceNum, taskID)
263+
logrus.Warnf("scheduler: failed to delete the peerID %s for pieceNum %d of taskID: %s: %v", peerID, pieceNum, taskID, err)
264264
}
265265
}
266266

0 commit comments

Comments
 (0)