2023-03-08 07:49:09 +01:00
|
|
|
package task
|
|
|
|
|
2023-03-14 17:02:25 +01:00
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/bsm/redislock"
|
|
|
|
)
|
|
|
|
|
2023-03-08 07:49:09 +01:00
|
|
|
const (
|
2023-03-14 17:02:25 +01:00
|
|
|
lockPrefix = "lock:"
|
|
|
|
lockRetryDelay = 25 * time.Millisecond
|
2023-03-08 07:49:09 +01:00
|
|
|
)
|
2023-03-14 17:02:25 +01:00
|
|
|
|
|
|
|
// lockRetry will at most try to obtain the lock 20 times within ~0.5s.
|
|
|
|
// it is expected to prevent immidiate requeue of the task at the expense of more redis calls.
|
|
|
|
func lockRetry() redislock.RetryStrategy {
|
|
|
|
return redislock.LimitRetry(
|
|
|
|
redislock.LinearBackoff(lockRetryDelay),
|
|
|
|
20,
|
|
|
|
)
|
|
|
|
}
|