diff --git a/internal/querynode/scheduler_policy.go b/internal/querynode/scheduler_policy.go index de60d12770..2ba5172765 100644 --- a/internal/querynode/scheduler_policy.go +++ b/internal/querynode/scheduler_policy.go @@ -9,7 +9,9 @@ type scheduleReadTaskPolicy func(sqTasks *list.List, targetUsage int32) ([]readT func defaultScheduleReadPolicy(sqTasks *list.List, targetUsage int32) ([]readTask, int32) { var ret []readTask usage := int32(0) - for e := sqTasks.Front(); e != nil; e = e.Next() { + var next *list.Element + for e := sqTasks.Front(); e != nil; e = next { + next = e.Next() t, _ := e.Value.(readTask) tUsage := t.CPUUsage() if usage+tUsage > targetUsage { diff --git a/internal/querynode/task_scheduler.go b/internal/querynode/task_scheduler.go index a3cbf7ac31..5453132238 100644 --- a/internal/querynode/task_scheduler.go +++ b/internal/querynode/task_scheduler.go @@ -139,7 +139,9 @@ func (s *taskScheduler) tryEvictUnsolvedReadTask(headCount int) { return } timeoutErr := fmt.Errorf("deadline exceed") - for e := s.unsolvedReadTasks.Front(); e != nil; e = e.Next() { + var next *list.Element + for e := s.unsolvedReadTasks.Front(); e != nil; e = next { + next = e.Next() t, ok := e.Value.(readTask) if !ok { s.unsolvedReadTasks.Remove(e) @@ -157,7 +159,8 @@ func (s *taskScheduler) tryEvictUnsolvedReadTask(headCount int) { } metrics.QueryNodeEvictedReadReqCount.WithLabelValues(fmt.Sprint(Params.QueryNodeCfg.GetNodeID())).Add(float64(diff)) busyErr := fmt.Errorf("server is busy") - for e := s.unsolvedReadTasks.Front(); e != nil && diff > 0; e = e.Next() { + for e := s.unsolvedReadTasks.Front(); e != nil && diff > 0; e = next { + next = e.Next() diff-- s.unsolvedReadTasks.Remove(e) t, ok := e.Value.(readTask) @@ -316,7 +319,9 @@ func (s *taskScheduler) Close() { } func (s *taskScheduler) tryMergeReadTasks() { - for e := s.unsolvedReadTasks.Front(); e != nil; e = e.Next() { + var next *list.Element + for e := s.unsolvedReadTasks.Front(); e != nil; e = next { + next = e.Next() t, ok := e.Value.(readTask) if !ok { s.unsolvedReadTasks.Remove(e)