修复一个任务调度BUG
This commit is contained in:
+23
-20
@@ -541,28 +541,34 @@ func (c *Cluster) executeTasks() {
|
|||||||
case <-c.ctx.Done():
|
case <-c.ctx.Done():
|
||||||
return
|
return
|
||||||
case c.workerChan <- struct{}{}:
|
case c.workerChan <- struct{}{}:
|
||||||
if c.usePriority && !c.priority.IsLatest(c.ctx) {
|
func() {
|
||||||
time.Sleep(5 * time.Second)
|
defer func() {
|
||||||
continue
|
<-c.workerChan
|
||||||
}
|
}()
|
||||||
|
|
||||||
taskID, err := c.redis.BLPop(c.ctx, 10*time.Second, c.listKey).Result()
|
if c.usePriority && !c.priority.IsLatest(c.ctx) {
|
||||||
if err != nil {
|
|
||||||
if err != redis.Nil {
|
|
||||||
c.logger.Errorf(c.ctx, "Failed to pop task: %v", err)
|
|
||||||
// Redis 异常,休眠一会儿
|
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(taskID) < 2 {
|
taskID, err := c.redis.BLPop(c.ctx, 10*time.Second, c.listKey).Result()
|
||||||
c.logger.Errorf(c.ctx, "Invalid BLPop result: %v", taskID)
|
if err != nil {
|
||||||
// 数据异常,继续下一个
|
if err != redis.Nil {
|
||||||
continue
|
c.logger.Errorf(c.ctx, "Failed to pop task: %v", err)
|
||||||
}
|
// Redis 异常,休眠一会儿
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
go c.processTask(taskID[1])
|
if len(taskID) < 2 {
|
||||||
|
c.logger.Errorf(c.ctx, "Invalid BLPop result: %v", taskID)
|
||||||
|
// 数据异常,继续下一个
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
go c.processTask(taskID[1])
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,9 +581,6 @@ type ReJobData struct {
|
|||||||
|
|
||||||
// 执行任务
|
// 执行任务
|
||||||
func (l *Cluster) processTask(taskId string) {
|
func (l *Cluster) processTask(taskId string) {
|
||||||
defer func() {
|
|
||||||
<-l.workerChan
|
|
||||||
}()
|
|
||||||
|
|
||||||
begin := time.Now()
|
begin := time.Now()
|
||||||
|
|
||||||
|
|||||||
@@ -289,38 +289,40 @@ func (l *Once) executeTasks() {
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
|
|
||||||
if l.usePriority {
|
|
||||||
if !l.priority.IsLatest(l.ctx) {
|
|
||||||
time.Sleep(time.Second * 5)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-l.stopChan:
|
case <-l.stopChan:
|
||||||
return
|
return
|
||||||
case <-l.ctx.Done():
|
case <-l.ctx.Done():
|
||||||
return
|
return
|
||||||
case l.workerChan <- struct{}{}:
|
case l.workerChan <- struct{}{}:
|
||||||
|
func() {
|
||||||
|
defer func() {
|
||||||
|
<-l.workerChan
|
||||||
|
}()
|
||||||
|
|
||||||
keys, err := l.redis.BLPop(l.ctx, time.Second*10, l.listKey).Result()
|
if l.usePriority && !l.priority.IsLatest(l.ctx) {
|
||||||
if err != nil {
|
|
||||||
if err != redis.Nil {
|
|
||||||
l.logger.Errorf(l.ctx, "Failed to pop task: %v", err)
|
|
||||||
// Redis 异常,休眠一会儿再重试
|
|
||||||
time.Sleep(time.Second * 5)
|
time.Sleep(time.Second * 5)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(keys) < 2 {
|
keys, err := l.redis.BLPop(l.ctx, time.Second*10, l.listKey).Result()
|
||||||
l.logger.Errorf(l.ctx, "Invalid task data: %v", keys)
|
if err != nil {
|
||||||
// 数据异常,继续下一个
|
if err != redis.Nil {
|
||||||
continue
|
l.logger.Errorf(l.ctx, "Failed to pop task: %v", err)
|
||||||
}
|
// Redis 异常,休眠一会儿再重试
|
||||||
// 处理任务
|
time.Sleep(time.Second * 5)
|
||||||
go l.processTask(keys[1])
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(keys) < 2 {
|
||||||
|
l.logger.Errorf(l.ctx, "Invalid task data: %v", keys)
|
||||||
|
// 数据异常,继续下一个
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 处理任务
|
||||||
|
go l.processTask(keys[1])
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -518,9 +520,6 @@ func (l *Once) batchGetTasks() {
|
|||||||
|
|
||||||
// 执行任务
|
// 执行任务
|
||||||
func (l *Once) processTask(key string) {
|
func (l *Once) processTask(key string) {
|
||||||
defer func() {
|
|
||||||
<-l.workerChan
|
|
||||||
}()
|
|
||||||
|
|
||||||
begin := time.Now()
|
begin := time.Now()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user