core/bloombits: fix deadlock when matcher session hits an error#1895
Merged
brilliant-lx merged 1 commit intobnb-chain:masterfrom Sep 27, 2023
msmania:bugfix-deadlock-eth_getLogs
Merged
core/bloombits: fix deadlock when matcher session hits an error#1895brilliant-lx merged 1 commit intobnb-chain:masterfrom msmania:bugfix-deadlock-eth_getLogs
brilliant-lx merged 1 commit intobnb-chain:masterfrom
msmania:bugfix-deadlock-eth_getLogs
Conversation
When MatcherSession encounters an error, it attempts to close the session. Closing waits for all goroutines to finish, including the 'distributor'. However, the distributor will not exit until all requests have returned. This patch fixes the issue by delivering the (empty) result to the distributor before calling Close().
buddh0
approved these changes
Sep 27, 2023
zlacfzy
approved these changes
Sep 27, 2023
msmania
added a commit
to msmania/bsc
that referenced
this pull request
Oct 30, 2023
…chain#1895) When MatcherSession encounters an error, it attempts to close the session. Closing waits for all goroutines to finish, including the 'distributor'. However, the distributor will not exit until all requests have returned. This patch fixes the issue by delivering the (empty) result to the distributor before calling Close().
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Calling
eth_getLogsfor pruned blocks causes deadlock. The exact same issue was reported as #1125 but it was never fixed.This patch has been merged in the upstream and will be included in the next version v1.13.2. More technical details are described in ethereum/go-ethereum#28184.
Rationale
Every node runners running pruned nodes encounter this deadlock. If a request causes deadlock, the request fail with timeout. To make matters worse, piled-up deadlock goroutines keep consuming system resource and the process will eventually be killed. due to OOM.
With this patch, the request immediately returns a jsonrpc error.
Example
Sending a single
eth_getLogsfor a single pruned block is enough to reproduce deadlock.Changes
Notable changes: