Skip to content

Commit

Permalink
executor: fix query hang in IndexMerge Executor when it's killed (#45284
Browse files Browse the repository at this point in the history
) (#45342)

close #45279
  • Loading branch information
ti-chi-bot committed Aug 9, 2023
1 parent e566f59 commit ced7a37
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions executor/index_merge_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -736,7 +736,7 @@ func (e *IndexMergeReaderExecutor) Next(ctx context.Context, req *chunk.Chunk) e

req.Reset()
for {
resultTask, err := e.getResultTask()
resultTask, err := e.getResultTask(ctx)
if err != nil {
return errors.Trace(err)
}
Expand All @@ -754,7 +754,7 @@ func (e *IndexMergeReaderExecutor) Next(ctx context.Context, req *chunk.Chunk) e
}
}

func (e *IndexMergeReaderExecutor) getResultTask() (*indexMergeTableTask, error) {
func (e *IndexMergeReaderExecutor) getResultTask(ctx context.Context) (*indexMergeTableTask, error) {
failpoint.Inject("testIndexMergeMainReturnEarly", func(_ failpoint.Value) {
// To make sure processWorker make resultCh to be full.
// When main goroutine close finished, processWorker may be stuck when writing resultCh.
Expand All @@ -768,8 +768,14 @@ func (e *IndexMergeReaderExecutor) getResultTask() (*indexMergeTableTask, error)
if !ok {
return nil, nil
}
if err := <-task.doneCh; err != nil {
return nil, errors.Trace(err)

select {
case <-ctx.Done():
return nil, errors.Trace(ctx.Err())
case err := <-task.doneCh:
if err != nil {
return nil, errors.Trace(err)
}
}

// Release the memory usage of last task before we handle a new task.
Expand Down

0 comments on commit ced7a37

Please sign in to comment.