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
The implementation of
BTreeMap::append
is non-performant making merging changesets very slow. We useExtend::extend
instead.Refer to:
rust-lang/rust#34666 (comment)
Notes to the reviewers
This is extracted from #1172. I did this as this is a no-brainer merge whereas the rest of #1172 requires a more thoughtful review.
I discovered this when running the bitcoind examples. Loading from the database takes a very long time (if we sync from segwit activation to tip, loading
LocalChain
will take more than a minute). The culprit isBTreeMap::append
(thank you for @LLFourn for this discovery).Changelog notice
Fix
BTreeMap::append
due to performance issues (refer to BTreeSet and BTreeMap append optimization rust-lang/rust#34666 (comment)).Checklists
All Submissions:
cargo fmt
andcargo clippy
before committingNew Features:
* [ ] I've added tests for the new featureBugfixes:
* [ ] This pull request breaks the existing API* [ ] I've added tests to reproduce the issue which are now passing* [ ] I'm linking the issue being fixed by this PR