mirror of
https://github.com/cloudreve/cloudreve.git
synced 2025-11-01 10:36:30 +08:00
Init V4 community edition (#2265)
* Init V4 community edition * Init V4 community edition
This commit is contained in:
109
pkg/queue/options.go
Normal file
109
pkg/queue/options.go
Normal file
@ -0,0 +1,109 @@
|
||||
package queue
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
// An Option configures a mutex.
|
||||
type Option interface {
|
||||
apply(*options)
|
||||
}
|
||||
|
||||
// OptionFunc is a function that configures a queue.
|
||||
type OptionFunc func(*options)
|
||||
|
||||
// Apply calls f(option)
|
||||
func (f OptionFunc) apply(option *options) {
|
||||
f(option)
|
||||
}
|
||||
|
||||
type options struct {
|
||||
maxTaskExecution time.Duration // Maximum execution time for a Task.
|
||||
retryDelay time.Duration
|
||||
taskPullInterval time.Duration
|
||||
backoffFactor float64
|
||||
backoffMaxDuration time.Duration
|
||||
maxRetry int
|
||||
resumeTaskType []string
|
||||
workerCount int
|
||||
name string
|
||||
}
|
||||
|
||||
func newDefaultOptions() *options {
|
||||
return &options{
|
||||
workerCount: runtime.NumCPU(),
|
||||
maxTaskExecution: 60 * time.Hour,
|
||||
backoffFactor: 2,
|
||||
backoffMaxDuration: 60 * time.Second,
|
||||
resumeTaskType: []string{},
|
||||
taskPullInterval: 1 * time.Second,
|
||||
name: "default",
|
||||
}
|
||||
}
|
||||
|
||||
// WithMaxTaskExecution set maximum execution time for a Task.
|
||||
func WithMaxTaskExecution(d time.Duration) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.maxTaskExecution = d
|
||||
})
|
||||
}
|
||||
|
||||
// WithRetryDelay set retry delay
|
||||
func WithRetryDelay(d time.Duration) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.retryDelay = d
|
||||
})
|
||||
}
|
||||
|
||||
// WithBackoffFactor set backoff factor
|
||||
func WithBackoffFactor(f float64) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.backoffFactor = f
|
||||
})
|
||||
}
|
||||
|
||||
// WithBackoffMaxDuration set backoff max duration
|
||||
func WithBackoffMaxDuration(d time.Duration) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.backoffMaxDuration = d
|
||||
})
|
||||
}
|
||||
|
||||
// WithMaxRetry set max retry
|
||||
func WithMaxRetry(n int) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.maxRetry = n
|
||||
})
|
||||
}
|
||||
|
||||
// WithResumeTaskType set resume Task type
|
||||
func WithResumeTaskType(types ...string) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.resumeTaskType = types
|
||||
})
|
||||
}
|
||||
|
||||
// WithWorkerCount set worker count
|
||||
func WithWorkerCount(num int) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
if num <= 0 {
|
||||
num = runtime.NumCPU()
|
||||
}
|
||||
q.workerCount = num
|
||||
})
|
||||
}
|
||||
|
||||
// WithName set queue name
|
||||
func WithName(name string) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.name = name
|
||||
})
|
||||
}
|
||||
|
||||
// WithTaskPullInterval set task pull interval
|
||||
func WithTaskPullInterval(d time.Duration) Option {
|
||||
return OptionFunc(func(q *options) {
|
||||
q.taskPullInterval = d
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user