Fix container/list removal in iteration (#17382)

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
pull/17385/head
congqixia 2022-06-06 16:34:05 +08:00 committed by GitHub
parent af994b5e1c
commit ac6394d0fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 4 deletions

View File

@ -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 {

View File

@ -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)