Skip to content

Commit d5ec998

Browse files
authored
feat(task): allow retry canceled (#7852)
1 parent 23f3178 commit d5ec998

File tree

6 files changed

+31
-7
lines changed

6 files changed

+31
-7
lines changed

internal/conf/config.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,13 @@ type TaskConfig struct {
5353
}
5454

5555
type TasksConfig struct {
56-
Download TaskConfig `json:"download" envPrefix:"DOWNLOAD_"`
57-
Transfer TaskConfig `json:"transfer" envPrefix:"TRANSFER_"`
58-
Upload TaskConfig `json:"upload" envPrefix:"UPLOAD_"`
59-
Copy TaskConfig `json:"copy" envPrefix:"COPY_"`
60-
Decompress TaskConfig `json:"decompress" envPrefix:"DECOMPRESS_"`
61-
DecompressUpload TaskConfig `json:"decompress_upload" envPrefix:"DECOMPRESS_UPLOAD_"`
56+
Download TaskConfig `json:"download" envPrefix:"DOWNLOAD_"`
57+
Transfer TaskConfig `json:"transfer" envPrefix:"TRANSFER_"`
58+
Upload TaskConfig `json:"upload" envPrefix:"UPLOAD_"`
59+
Copy TaskConfig `json:"copy" envPrefix:"COPY_"`
60+
Decompress TaskConfig `json:"decompress" envPrefix:"DECOMPRESS_"`
61+
DecompressUpload TaskConfig `json:"decompress_upload" envPrefix:"DECOMPRESS_UPLOAD_"`
62+
AllowRetryCanceled bool `json:"allow_retry_canceled" env:"ALLOW_RETRY_CANCELED"`
6263
}
6364

6465
type Cors struct {
@@ -182,6 +183,7 @@ func DefaultConfig() *Config {
182183
Workers: 5,
183184
MaxRetry: 2,
184185
},
186+
AllowRetryCanceled: false,
185187
},
186188
Cors: Cors{
187189
AllowOrigins: []string{"*"},

internal/fs/archive.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func (t *ArchiveDownloadTask) GetStatus() string {
5050
}
5151

5252
func (t *ArchiveDownloadTask) Run() error {
53+
t.ReinitCtx()
5354
t.ClearEndTime()
5455
t.SetStartTime(time.Now())
5556
defer func() { t.SetEndTime(time.Now()) }()
@@ -144,6 +145,7 @@ func (t *ArchiveContentUploadTask) GetStatus() string {
144145
}
145146

146147
func (t *ArchiveContentUploadTask) Run() error {
148+
t.ReinitCtx()
147149
t.ClearEndTime()
148150
t.SetStartTime(time.Now())
149151
defer func() { t.SetEndTime(time.Now()) }()
@@ -235,7 +237,9 @@ func (t *ArchiveContentUploadTask) RunWithNextTaskCallback(f func(nextTsk *Archi
235237

236238
func (t *ArchiveContentUploadTask) Cancel() {
237239
t.TaskExtension.Cancel()
238-
t.deleteSrcFile()
240+
if !conf.Conf.Tasks.AllowRetryCanceled {
241+
t.deleteSrcFile()
242+
}
239243
}
240244

241245
func (t *ArchiveContentUploadTask) deleteSrcFile() {

internal/fs/copy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func (t *CopyTask) GetStatus() string {
3939
}
4040

4141
func (t *CopyTask) Run() error {
42+
t.ReinitCtx()
4243
t.ClearEndTime()
4344
t.SetStartTime(time.Now())
4445
defer func() { t.SetEndTime(time.Now()) }()

internal/offline_download/tool/download.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type DownloadTask struct {
2828
}
2929

3030
func (t *DownloadTask) Run() error {
31+
t.ReinitCtx()
3132
t.ClearEndTime()
3233
t.SetStartTime(time.Now())
3334
defer func() { t.SetEndTime(time.Now()) }()

internal/offline_download/tool/transfer.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type TransferTask struct {
3232
}
3333

3434
func (t *TransferTask) Run() error {
35+
t.ReinitCtx()
3536
t.ClearEndTime()
3637
t.SetStartTime(time.Now())
3738
defer func() { t.SetEndTime(time.Now()) }()

internal/task/base.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package task
22

33
import (
44
"context"
5+
"github.com/alist-org/alist/v3/internal/conf"
56
"github.com/alist-org/alist/v3/internal/model"
67
"github.com/xhofe/tache"
78
"sync"
@@ -66,6 +67,20 @@ func (t *TaskExtension) Ctx() context.Context {
6667
return t.ctx
6768
}
6869

70+
func (t *TaskExtension) ReinitCtx() {
71+
if !conf.Conf.Tasks.AllowRetryCanceled {
72+
return
73+
}
74+
select {
75+
case <-t.Base.Ctx().Done():
76+
ctx, cancel := context.WithCancel(context.Background())
77+
t.SetCtx(ctx)
78+
t.SetCancelFunc(cancel)
79+
t.ctx = nil
80+
default:
81+
}
82+
}
83+
6984
type TaskExtensionInfo interface {
7085
tache.TaskWithInfo
7186
GetCreator() *model.User

0 commit comments

Comments
 (0)