-
Notifications
You must be signed in to change notification settings - Fork 5.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
executor: fix data race of parallel apply operator #24257
Conversation
Signed-off-by: guo-shaoge <shaoge1994@163.com>
ea79638
to
bd9141d
Compare
@wshwsh12 PTAL |
if atomic.LoadUint32(&e.started) == 1 { | ||
close(e.exit) | ||
e.notifyWg.Wait() | ||
e.started = 0 | ||
} | ||
// Wait all workers to finish before Close() is called. | ||
// Otherwise we may got data race. | ||
err := e.outerExec.Close() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we add a failpoint test for this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This bug is found by an existing case(TestApplyGoroutinePanic).
I think the case can cover the code.
5d24ab5
to
bd9141d
Compare
/lgtm |
[REVIEW NOTIFICATION] This pull request has been approved by:
To complete the pull request process, please ask the reviewers in the list to review by filling The full list of commands accepted by this bot can be found here. Reviewer can indicate their review by writing |
/merge |
This pull request has been accepted and is ready to merge. Commit hash: bd9141d
|
/run-unit-test |
1 similar comment
/run-unit-test |
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
cherry pick to release-5.0 in PR #24345 |
What problem does this PR solve?
Issue Number: close #23280
Problem Summary:
TestApplyGoroutinePanic
test the situation of inner work panics. Sometime we got data race error. That's because:Feedback info will be read in step 3. But before step 4 really works, outer worker still runs normally, it will write Feedbackinfo.
So we got data race. (Only happens on feedback, it's disabled by default.)
What is changed and how it works?
What's Changed: In Apply's Close() method, we first notify outer worker to finish and wait untill it's really finished. Then we call outer exec's Close() method.
Related changes
pingcap/docs
/pingcap/docs-cn
:Check List
Tests: difficult to reproduce.
Side effects: no
Release note