You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
package gojobs
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"go.dtapp.net/gojobs/jobs_gorm_model"
|
|
)
|
|
|
|
// Lock 上锁
|
|
func (j *JobsGorm) Lock(info jobs_gorm_model.Task, id any) (string, error) {
|
|
|
|
if j.config.lockType == "" {
|
|
return "", errors.New("没有配置")
|
|
}
|
|
|
|
var (
|
|
redisKey = fmt.Sprintf("%s:%v:%v", j.config.lockPrefix, info.Type, id)
|
|
etcdKey = fmt.Sprintf("%s/%v/%v", j.config.lockPrefix, info.Type, id)
|
|
val = fmt.Sprintf("已在%s@%s机器上锁成功", j.config.insideIp, j.config.outsideIp)
|
|
ttl = info.Frequency * 3
|
|
)
|
|
|
|
if j.config.lockType == lockTypeRedis {
|
|
return j.service.lockRedisClient.Lock(redisKey, val, ttl)
|
|
}
|
|
|
|
return j.service.lockEtcdClient.Lock(etcdKey, val, ttl)
|
|
}
|
|
|
|
// Unlock Lock 解锁
|
|
func (j *JobsGorm) Unlock(info jobs_gorm_model.Task, id any) error {
|
|
|
|
if j.config.lockType == "" {
|
|
return errors.New("没有配置")
|
|
}
|
|
|
|
var (
|
|
redisKey = fmt.Sprintf("%s:%v:%v", j.config.lockPrefix, info.Type, id)
|
|
etcdKey = fmt.Sprintf("%s/%v/%v", j.config.lockPrefix, info.Type, id)
|
|
)
|
|
|
|
if j.config.lockType == lockTypeRedis {
|
|
return j.service.lockRedisClient.Unlock(redisKey)
|
|
}
|
|
|
|
return j.service.lockEtcdClient.Unlock(etcdKey)
|
|
}
|
|
|
|
// LockForever 永远上锁
|
|
func (j *JobsGorm) LockForever(info jobs_gorm_model.Task, id any) (string, error) {
|
|
|
|
if j.config.lockType == "" {
|
|
return "", errors.New("没有配置")
|
|
}
|
|
|
|
var (
|
|
redisKey = fmt.Sprintf("%s:%v:%v", j.config.lockPrefix, info.Type, id)
|
|
etcdKey = fmt.Sprintf("%s/%v/%v", j.config.lockPrefix, info.Type, id)
|
|
val = fmt.Sprintf("已在%s@%s机器永远上锁成功", j.config.insideIp, j.config.outsideIp)
|
|
)
|
|
|
|
if j.config.lockType == lockTypeRedis {
|
|
return j.service.lockRedisClient.LockForever(redisKey, val)
|
|
}
|
|
|
|
return j.service.lockEtcdClient.LockForever(etcdKey, val)
|
|
}
|