1. 增加任务调度器配置文件
2. 创建/更新计划会自动处理触发器
This commit is contained in:
@@ -18,23 +18,23 @@ type PendingTaskRepository interface {
|
||||
RequeueTask(originalPendingTask *models.PendingTask) error
|
||||
}
|
||||
|
||||
// pendingTaskRepository 是使用 GORM 的具体实现。
|
||||
type pendingTaskRepository struct {
|
||||
// gormPendingTaskRepository 是使用 GORM 的具体实现。
|
||||
type gormPendingTaskRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewPendingTaskRepository 创建一个新的待执行任务队列仓库。
|
||||
func NewPendingTaskRepository(db *gorm.DB) PendingTaskRepository {
|
||||
return &pendingTaskRepository{db: db}
|
||||
// NewGormPendingTaskRepository 创建一个新的待执行任务队列仓库。
|
||||
func NewGormPendingTaskRepository(db *gorm.DB) PendingTaskRepository {
|
||||
return &gormPendingTaskRepository{db: db}
|
||||
}
|
||||
|
||||
// CreatePendingTasksInBatch 在一次数据库调用中创建多个待执行任务条目。
|
||||
func (r *pendingTaskRepository) CreatePendingTasksInBatch(tasks []*models.PendingTask) error {
|
||||
func (r *gormPendingTaskRepository) CreatePendingTasksInBatch(tasks []*models.PendingTask) error {
|
||||
return r.db.Create(&tasks).Error
|
||||
}
|
||||
|
||||
// ClaimNextAvailableTask 以原子方式认领下一个可用的任务。
|
||||
func (r *pendingTaskRepository) ClaimNextAvailableTask(excludePlanIDs []uint) (*models.TaskExecutionLog, *models.PendingTask, error) {
|
||||
func (r *gormPendingTaskRepository) ClaimNextAvailableTask(excludePlanIDs []uint) (*models.TaskExecutionLog, *models.PendingTask, error) {
|
||||
var log models.TaskExecutionLog
|
||||
var pendingTask models.PendingTask
|
||||
|
||||
@@ -79,7 +79,7 @@ func (r *pendingTaskRepository) ClaimNextAvailableTask(excludePlanIDs []uint) (*
|
||||
|
||||
// RequeueTask 安全地将一个任务重新放回队列。
|
||||
// 它通过将原始 PendingTask 的 ID 重置为 0,并重新创建它来实现。
|
||||
func (r *pendingTaskRepository) RequeueTask(originalPendingTask *models.PendingTask) error {
|
||||
func (r *gormPendingTaskRepository) RequeueTask(originalPendingTask *models.PendingTask) error {
|
||||
return r.db.Transaction(func(tx *gorm.DB) error {
|
||||
// 1. 将日志状态恢复为 waiting
|
||||
if err := tx.Model(&models.TaskExecutionLog{}).Where("id = ?", originalPendingTask.TaskExecutionLogID).Update("status", models.ExecutionStatusWaiting).Error; err != nil {
|
||||
|
||||
Reference in New Issue
Block a user