-
Notifications
You must be signed in to change notification settings - Fork 35.7k
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
CCoinsViewCache code cleanup & deduplication #9384
Conversation
bf933d7
to
3110285
Compare
3110285
to
e9316f6
Compare
e9316f6
to
c72de76
Compare
src/test/coins_tests.cpp
Outdated
@@ -612,7 +612,7 @@ BOOST_AUTO_TEST_CASE(ccoins_access) | |||
CheckAccessCoins(ABSENT, VALUE2, VALUE2, FRESH , FRESH ); | |||
CheckAccessCoins(ABSENT, VALUE2, VALUE2, DIRTY , DIRTY ); | |||
CheckAccessCoins(ABSENT, VALUE2, VALUE2, DIRTY|FRESH, DIRTY|FRESH); | |||
CheckAccessCoins(PRUNED, ABSENT, PRUNED, NO_ENTRY , FRESH ); | |||
CheckAccessCoins(PRUNED, ABSENT, ABSENT, NO_ENTRY , NO_ENTRY ); |
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.
Explanation of this change: Calling CCoinsViewCache::AccessCoins when no cache entry exists and the base entry is pruned no longer creates a cache entry.
The changed behavior in this case is better than the current behavior because now this case is consistent with the case in line 606 above where no cache entry exists and no base entry exists. It doesn't make any sense for the cache to behave differently just because a base entry is pruned instead of nonexistent.
src/test/coins_tests.cpp
Outdated
@@ -826,15 +826,15 @@ BOOST_AUTO_TEST_CASE(ccoins_write) | |||
CheckWriteCoins(PRUNED, ABSENT, PRUNED, DIRTY , NO_ENTRY , DIRTY ); | |||
CheckWriteCoins(PRUNED, ABSENT, PRUNED, DIRTY|FRESH, NO_ENTRY , DIRTY|FRESH); | |||
CheckWriteCoins(PRUNED, PRUNED, PRUNED, 0 , DIRTY , DIRTY ); | |||
CheckWriteCoins(PRUNED, PRUNED, PRUNED, 0 , DIRTY|FRESH, DIRTY ); | |||
CheckWriteCoins(PRUNED, PRUNED, ABSENT, 0 , DIRTY|FRESH, NO_ENTRY ); |
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.
Explanation of this change: Overwriting a non-dirty pruned cache entry with a fresh pruned cache entry now deletes the cache entry instead of leaving behind a dirty pruned entry that will trigger an unnecessary database write later.
src/test/coins_tests.cpp
Outdated
CheckWriteCoins(PRUNED, PRUNED, ABSENT, FRESH , DIRTY , NO_ENTRY ); | ||
CheckWriteCoins(PRUNED, PRUNED, ABSENT, FRESH , DIRTY|FRESH, NO_ENTRY ); | ||
CheckWriteCoins(PRUNED, PRUNED, PRUNED, DIRTY , DIRTY , DIRTY ); | ||
CheckWriteCoins(PRUNED, PRUNED, PRUNED, DIRTY , DIRTY|FRESH, DIRTY ); | ||
CheckWriteCoins(PRUNED, PRUNED, ABSENT, DIRTY|FRESH, DIRTY , NO_ENTRY ); | ||
CheckWriteCoins(PRUNED, PRUNED, ABSENT, DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY ); | ||
CheckWriteCoins(PRUNED, VALUE2, VALUE2, 0 , DIRTY , DIRTY ); | ||
CheckWriteCoins(PRUNED, VALUE2, VALUE2, 0 , DIRTY|FRESH, DIRTY ); | ||
CheckWriteCoins(PRUNED, VALUE2, VALUE2, 0 , DIRTY|FRESH, DIRTY|FRESH); |
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.
Explanation of this change: Overwriting a dirty pruned fresh cache entry with a nonpruned entry updates the entry without dropping the fresh flag. There's no reason to drop the fresh flag in this case because the flag accurately describes the state of the base view and could prevent unnecessary database writes in the future if the utxo is spent later.
@sipa, this is the PR I mentioned other day. It does move code to the modifier object, but the code could be moved if the modifier object is going away. |
@sipa, I posted a version of your pertxoutcache branch rebased on top of this PR here: It might be useful to you even if you aren't interested in this PR because it also updates coins_tests to be compatible with your change. Relevant commits:
|
c72de76
to
2f2d3c8
Compare
Rebased c72de76 -> 2f2d3c8 (pr/ccoins-cleanup.6 -> pr/ccoins-cleanup.7) after #10195 merge. |
2f2d3c8
to
3debeb1
Compare
4badd8b
to
8f171dc
Compare
8f171dc
to
2279ff5
Compare
Concept ACK |
} | ||
return true; | ||
coin.Clear(); | ||
return !already_spent; |
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.
I think this change (after #10537) would have prevented the inflation bug caused by #9049 + #10195, discussed in
the CVE-2018-17144 full disclosure.
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
The last travis run for this pull request was 281 days ago and is thus outdated. To trigger a fresh travis build, this pull request should be closed and re-opened. |
2279ff5
to
9661676
Compare
9661676
to
8c74391
Compare
8c74391
to
b837952
Compare
Rebased 8c74391 -> b837952 ( |
b837952
to
0c33bd2
Compare
0c33bd2
to
a40f7e5
Compare
The change moves code responsible for updating the cache out of various CCoinsViewCache methods and into a Modifier class. This way the cache update code is just written once in a general way instead of being duplicated and split up to handle various special cases. This is a refactoring, with changes to cache behavior only in 2 corner cases (with corresponding tests in coins_test.cpp) which don't affect the meaning of data stored in the cache: * In BatchWrite, overwriting a non-dirty pruned cache entry with a fresh pruned cache entry now deletes the cache entry instead of leaving behind a dirty pruned entry that will trigger an unnecessary database write later. * In BatchWrite, overwriting a dirty pruned fresh cache entry with a nonpruned entry updates the entry without dropping the fresh flag. There's no reason to drop the fresh flag in this case because the flag accurately describes the state of the base view and could prevent unnecessary database writes in the future if the utxo is spent later.
a40f7e5
to
ed03785
Compare
Master-headers-dns (bitcoin/bitcoin#15934) del (bitcoin/bitcoin#15934) ipc-export (bitcoin/bitcoin#15934) pr/= (bitcoin/bitcoin#15934) pr/argcheck (bitcoin/bitcoin#16545, bitcoin/bitcoin#15934) pr/argcheck.12-rebase (bitcoin/bitcoin#15934) pr/argcheck.18-rebase (bitcoin/bitcoin#15934) pr/argcheck.19-rebase (bitcoin/bitcoin#15934) pr/argcheck.20-rebase (bitcoin/bitcoin#15934) pr/argcheck.21-rebase (bitcoin/bitcoin#15934) pr/argcheck.22-rebase (bitcoin/bitcoin#15934) pr/argcheck.24-rebase (bitcoin/bitcoin#15934) pr/argcheck.25-rebase (bitcoin/bitcoin#15934) pr/argcheck.26-rebase (bitcoin/bitcoin#15934) pr/argmap (bitcoin/bitcoin#15934) pr/argscripts (bitcoin/bitcoin#15934) pr/argscripts.1-rebase (bitcoin/bitcoin#15934) pr/argscripts.3-rebase (bitcoin/bitcoin#15934) pr/argscripts.5-rebase (bitcoin/bitcoin#15934) pr/argscripts.7-rebase (bitcoin/bitcoin#15934) pr/atw-nomerge (bitcoin/bitcoin#15934) pr/atw-nomerge.74-rebase (bitcoin/bitcoin#15934) pr/atw-nomerge.76-rebase (bitcoin/bitcoin#15934) pr/atw-nomerge.77-rebase (bitcoin/bitcoin#15934) pr/atw-nomerge.78-rebase (bitcoin/bitcoin#15934) pr/badbdb (bitcoin/bitcoin#20974, bitcoin/bitcoin#15934) pr/badsalv (bitcoin/bitcoin#15934) pr/block (bitcoin/bitcoin#15934) pr/block.1-rebase (bitcoin/bitcoin#15934) pr/bp (bitcoin/bitcoin#15934) pr/capconst (bitcoin/bitcoin#15934) pr/cblock (bitcoin/bitcoin#15934) pr/ccoins-cleanup (bitcoin/bitcoin#9384, bitcoin/bitcoin#15934) pr/ccoins-cleanup.12-rebase (bitcoin/bitcoin#15934) pr/ccoins-cleanup.13-rebase (bitcoin/bitcoin#15934) pr/ccoins-cleanup.14-rebase (bitcoin/bitcoin#15934) pr/ccoins-cleanup.16-rebase (bitcoin/bitcoin#15934) pr/cleanset (bitcoin/bitcoin#15934) pr/commoninit (bitcoin/bitcoin#15934) pr/create (bitcoin/bitcoin#15934) pr/create.1-rebase (bitcoin/bitcoin#15934) pr/defw (bitcoin/bitcoin#15934) pr/dep-libevent (bitcoin/bitcoin#15934) pr/ensa (bitcoin/bitcoin#15934) pr/ensa.1-rebase (bitcoin/bitcoin#15934) pr/exist (bitcoin/bitcoin#15934) pr/exist.1-rebase (bitcoin/bitcoin#15934) pr/exist.2-rebase (bitcoin/bitcoin#15934) pr/exist.3-rebase (bitcoin/bitcoin#15934) pr/fee (bitcoin/bitcoin#10443, bitcoin/bitcoin#15934) pr/fee.49-rebase (bitcoin/bitcoin#15934) pr/fee.50-rebase (bitcoin/bitcoin#15934) pr/fee.51-rebase (bitcoin/bitcoin#15934) pr/fee.52-rebase (bitcoin/bitcoin#15934) pr/fee.56-rebase (bitcoin/bitcoin#15934) pr/fee.57-rebase (bitcoin/bitcoin#15934) pr/fee.58-rebase (bitcoin/bitcoin#15934) pr/fee.59-rebase (bitcoin/bitcoin#15934) pr/fee.60-rebase (bitcoin/bitcoin#15934) pr/fee.62-rebase (bitcoin/bitcoin#15934) pr/fee.63-rebase (bitcoin/bitcoin#15934) pr/fee.64-rebase (bitcoin/bitcoin#15934) pr/fee.65-rebase (bitcoin/bitcoin#15934) pr/fee.66-rebase (bitcoin/bitcoin#15934) pr/fee.67-rebase (bitcoin/bitcoin#15934) pr/fee.68-rebase (bitcoin/bitcoin#15934) pr/fee.69-rebase (bitcoin/bitcoin#15934) pr/fixref (bitcoin/bitcoin#15934) pr/frpc (bitcoin/bitcoin#15934) pr/frpc.1-rebase (bitcoin/bitcoin#15934) pr/frpc.3-rebase (bitcoin/bitcoin#15934) pr/frpc.5-rebase (bitcoin/bitcoin#15934) pr/frpc.6-rebase (bitcoin/bitcoin#15934) pr/frpc.7-rebase (bitcoin/bitcoin#15934) pr/fsd (bitcoin/bitcoin#15934) pr/getblock (bitcoin/bitcoin#15934) pr/green (bitcoin/bitcoin#15934) pr/grind (bitcoin/bitcoin#15934) pr/gsync (bitcoin/bitcoin#15934) pr/guishut (bitcoin/bitcoin#15934) pr/indexy (bitcoin/bitcoin#24230, bitcoin/bitcoin#15934) pr/indexy.1-rebase (bitcoin/bitcoin#15934) pr/initc (bitcoin/bitcoin#15934) pr/intarg (bitcoin/bitcoin#15934) pr/intarg.1-rebase (bitcoin/bitcoin#15934) pr/intarg.2-rebase (bitcoin/bitcoin#15934) pr/ipc (bitcoin/bitcoin#10102, bitcoin/bitcoin#15934) pr/ipc-bal (bitcoin/bitcoin#15934) pr/ipc-bal.1-rebase (bitcoin/bitcoin#15934) pr/ipc-bal.3-rebase (bitcoin/bitcoin#15934) pr/ipc-banmap (bitcoin/bitcoin#15934) pr/ipc-banmap.1-rebase (bitcoin/bitcoin#15934) pr/ipc-blob (bitcoin/bitcoin#15934) pr/ipc-broadcast (bitcoin/bitcoin#15934) pr/ipc-build (bitcoin/bitcoin#15934) pr/ipc-build.13-rebase (bitcoin/bitcoin#15934) pr/ipc-build.22-rebase (bitcoin/bitcoin#15934) pr/ipc-build2 (bitcoin/bitcoin#15934) pr/ipc-build2.5-rebase (bitcoin/bitcoin#15934) pr/ipc-build2.7-rebase (bitcoin/bitcoin#15934) pr/ipc-client (bitcoin/bitcoin#15934) pr/ipc-clients (bitcoin/bitcoin#15934) pr/ipc-clients.1-rebase (bitcoin/bitcoin#15934) pr/ipc-connect (bitcoin/bitcoin#19460, bitcoin/bitcoin#15934) pr/ipc-connect.10-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.11-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.12-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.13-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.14-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.15-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.16-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.17-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.18-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.19-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.2-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.20-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.21-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.22-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.23-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.24-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.25-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.26-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.27-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.3-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.4-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.5-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.6-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.7-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.8-rebase (bitcoin/bitcoin#15934) pr/ipc-connect.9-rebase (bitcoin/bitcoin#15934) pr/ipc-conv (bitcoin/bitcoin#15934) pr/ipc-conv.3-rebase (bitcoin/bitcoin#15934) pr/ipc-conv.5-rebase (bitcoin/bitcoin#15934) pr/ipc-conv.6-rebase (bitcoin/bitcoin#15934) pr/ipc-count (bitcoin/bitcoin#15934) pr/ipc-ctx (bitcoin/bitcoin#15934) pr/ipc-echo (bitcoin/bitcoin#15934) pr/ipc-echo.10-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.11-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.12-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.13-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.18-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.19-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.20-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.21-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.22-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.23-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.26-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.28-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.29-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.3-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.30-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.5-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.6-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.7-rebase (bitcoin/bitcoin#15934) pr/ipc-echo.9-rebase (bitcoin/bitcoin#15934) pr/ipc-fill (bitcoin/bitcoin#15934) pr/ipc-found (bitcoin/bitcoin#15934) pr/ipc-gui (bitcoin/bitcoin#19461, bitcoin/bitcoin#15934) pr/ipc-gui.1-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.10-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.11-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.12-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.13-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.14-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.15-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.16-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.17-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.2-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.4-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.5-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.6-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.7-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.8-rebase (bitcoin/bitcoin#15934) pr/ipc-gui.9-rebase (bitcoin/bitcoin#15934) pr/ipc-init (bitcoin/bitcoin#15934) pr/ipc-make (bitcoin/bitcoin#15934) pr/ipc-make.1-rebase (bitcoin/bitcoin#15934) pr/ipc-make.4-rebase (bitcoin/bitcoin#15934) pr/ipc-make.5-rebase (bitcoin/bitcoin#15934) pr/ipc-mv (bitcoin/bitcoin#15934) pr/ipc-rpath (bitcoin/bitcoin#15934) pr/ipc-sargs (bitcoin/bitcoin#15934) pr/ipc-signer (bitcoin/bitcoin#15934) pr/ipc-signer.1-rebase (bitcoin/bitcoin#15934) pr/ipc-tapc (bitcoin/bitcoin#15934) pr/ipc-txup (bitcoin/bitcoin#15934) pr/ipc-wset (bitcoin/bitcoin#15934) pr/ipc.100-rebase (bitcoin/bitcoin#15934) pr/ipc.102-rebase (bitcoin/bitcoin#15934) pr/ipc.103-rebase (bitcoin/bitcoin#15934) pr/ipc.104-rebase (bitcoin/bitcoin#15934) pr/ipc.106-rebase (bitcoin/bitcoin#15934) pr/ipc.108-rebase (bitcoin/bitcoin#15934) pr/ipc.109-rebase (bitcoin/bitcoin#15934) pr/ipc.110-rebase (bitcoin/bitcoin#15934) pr/ipc.112-rebase (bitcoin/bitcoin#15934) pr/ipc.113-rebase (bitcoin/bitcoin#15934) pr/ipc.115-rebase (bitcoin/bitcoin#15934) pr/ipc.116-rebase (bitcoin/bitcoin#15934) pr/ipc.118-rebase (bitcoin/bitcoin#15934) pr/ipc.119-rebase (bitcoin/bitcoin#15934) pr/ipc.120-rebase (bitcoin/bitcoin#15934) pr/ipc.121-rebase (bitcoin/bitcoin#15934) pr/ipc.123-rebase (bitcoin/bitcoin#15934) pr/ipc.124-rebase (bitcoin/bitcoin#15934) pr/ipc.125-rebase (bitcoin/bitcoin#15934) pr/ipc.129-rebase (bitcoin/bitcoin#15934) pr/ipc.130-rebase (bitcoin/bitcoin#15934) pr/ipc.131-rebase (bitcoin/bitcoin#15934) pr/ipc.133-rebase (bitcoin/bitcoin#15934) pr/ipc.134-rebase (bitcoin/bitcoin#15934) pr/ipc.137-rebase (bitcoin/bitcoin#15934) pr/ipc.138-rebase (bitcoin/bitcoin#15934) pr/ipc.139-rebase (bitcoin/bitcoin#15934) pr/ipc.140-rebase (bitcoin/bitcoin#15934) pr/ipc.141-rebase (bitcoin/bitcoin#15934) pr/ipc.142-rebase (bitcoin/bitcoin#15934) pr/ipc.143-rebase (bitcoin/bitcoin#15934) pr/ipc.144-rebase (bitcoin/bitcoin#15934) pr/ipc.145-rebase (bitcoin/bitcoin#15934) pr/ipc.146-rebase (bitcoin/bitcoin#15934) pr/ipc.147-rebase (bitcoin/bitcoin#15934) pr/ipc.148-rebase (bitcoin/bitcoin#15934) pr/ipc.149-rebase (bitcoin/bitcoin#15934) pr/ipc.150-rebase (bitcoin/bitcoin#15934) pr/ipc.152-rebase (bitcoin/bitcoin#15934) pr/ipc.153-rebase (bitcoin/bitcoin#15934) pr/ipc.154-rebase (bitcoin/bitcoin#15934) pr/ipc.155-rebase (bitcoin/bitcoin#15934) pr/ipc.156-rebase (bitcoin/bitcoin#15934) pr/ipc.157-rebase (bitcoin/bitcoin#15934) pr/ipc.158-rebase (bitcoin/bitcoin#15934) pr/ipc.159-rebase (bitcoin/bitcoin#15934) pr/ipc.160-rebase (bitcoin/bitcoin#15934) pr/ipc.161-rebase (bitcoin/bitcoin#15934) pr/ipc.162-rebase (bitcoin/bitcoin#15934) pr/ipc.164-rebase (bitcoin/bitcoin#15934) pr/ipc.165-rebase (bitcoin/bitcoin#15934) pr/ipc.167-rebase (bitcoin/bitcoin#15934) pr/ipc.169-rebase (bitcoin/bitcoin#15934) pr/ipc.170-rebase (bitcoin/bitcoin#15934) pr/ipc.171-rebase (bitcoin/bitcoin#15934) pr/ipc.172-rebase (bitcoin/bitcoin#15934) pr/libnode (bitcoin/bitcoin#15934) pr/loader (bitcoin/bitcoin#15934) pr/locka (bitcoin/bitcoin#15934) pr/locka.1-rebase (bitcoin/bitcoin#15934) pr/lockb (bitcoin/bitcoin#15934) pr/macs (bitcoin/bitcoin#15934) pr/mergeset (bitcoin/bitcoin#15934) pr/named (bitcoin/bitcoin#19762, bitcoin/bitcoin#15934) pr/names (bitcoin/bitcoin#15934) pr/names.10-rebase (bitcoin/bitcoin#15934) pr/names.11-rebase (bitcoin/bitcoin#15934) pr/names.13-rebase (bitcoin/bitcoin#15934) pr/names.15-rebase (bitcoin/bitcoin#15934) pr/names.2-rebase (bitcoin/bitcoin#15934) pr/names.3-rebase (bitcoin/bitcoin#15934) pr/names.4-rebase (bitcoin/bitcoin#15934) pr/names.5-rebase (bitcoin/bitcoin#15934) pr/names.6-rebase (bitcoin/bitcoin#15934) pr/names.7-rebase (bitcoin/bitcoin#15934) pr/names.8-rebase (bitcoin/bitcoin#15934) pr/names.9-rebase (bitcoin/bitcoin#15934) pr/next (bitcoin/bitcoin#15934) pr/next.4-rebase (bitcoin/bitcoin#15934) pr/next.5-rebase (bitcoin/bitcoin#15934) pr/next.6-rebase (bitcoin/bitcoin#15934) pr/nodest (bitcoin/bitcoin#15934) pr/nodest.10-rebase (bitcoin/bitcoin#15934) pr/nodest.11-rebase (bitcoin/bitcoin#15934) pr/nodest.12-rebase (bitcoin/bitcoin#15934) pr/nodest.13-rebase (bitcoin/bitcoin#15934) pr/nodest.2-rebase (bitcoin/bitcoin#15934) pr/nodest.3-rebase (bitcoin/bitcoin#15934) pr/nodest.4-rebase (bitcoin/bitcoin#15934) pr/nodest.5-rebase (bitcoin/bitcoin#15934) pr/nodest.6-rebase (bitcoin/bitcoin#15934) pr/nodest.7-rebase (bitcoin/bitcoin#15934) pr/nodest.9-rebase (bitcoin/bitcoin#15934) pr/nodestg (bitcoin/bitcoin#15934) pr/nonot (bitcoin/bitcoin#15934) pr/nosig (bitcoin/bitcoin#15934) pr/notify-shared (bitcoin/bitcoin#15934) pr/novp (bitcoin/bitcoin#15934) pr/novp.1-rebase (bitcoin/bitcoin#15934) pr/novp.10-rebase (bitcoin/bitcoin#15934) pr/novp.11-rebase (bitcoin/bitcoin#15934) pr/novp.12-rebase (bitcoin/bitcoin#15934) pr/novp.13-rebase (bitcoin/bitcoin#15934) pr/novp.14-rebase (bitcoin/bitcoin#15934) pr/novp.15-rebase (bitcoin/bitcoin#15934) pr/novp.16-rebase (bitcoin/bitcoin#15934) pr/novp.17-rebase (bitcoin/bitcoin#15934) pr/novp.19-rebase (bitcoin/bitcoin#15934) pr/novp.2-rebase (bitcoin/bitcoin#15934) pr/novp.20-rebase (bitcoin/bitcoin#15934) pr/novp.21-rebase (bitcoin/bitcoin#15934) pr/novp.22-rebase (bitcoin/bitcoin#15934) pr/novp.23-rebase (bitcoin/bitcoin#15934) pr/novp.25-rebase (bitcoin/bitcoin#15934) pr/novp.26-rebase (bitcoin/bitcoin#15934) pr/novp.27-rebase (bitcoin/bitcoin#15934) pr/novp.28-rebase (bitcoin/bitcoin#15934) pr/novp.3-rebase (bitcoin/bitcoin#15934) pr/novp.4-rebase (bitcoin/bitcoin#15934) pr/novp.5-rebase (bitcoin/bitcoin#15934) pr/novp.6-rebase (bitcoin/bitcoin#15934) pr/novp.7-rebase (bitcoin/bitcoin#15934) pr/novp.8-rebase (bitcoin/bitcoin#15934) pr/novp.9-rebase (bitcoin/bitcoin#15934) pr/nowa (bitcoin/bitcoin#15934) pr/nowa.3-rebase (bitcoin/bitcoin#15934) pr/path (bitcoin/bitcoin#15934) pr/path.2-rebase (bitcoin/bitcoin#15934) pr/path.4-rebase (bitcoin/bitcoin#15934) pr/path.5-rebase (bitcoin/bitcoin#15934) pr/path.6-rebase (bitcoin/bitcoin#15934) pr/path.7-rebase (bitcoin/bitcoin#15934) pr/path.8-rebase (bitcoin/bitcoin#15934) pr/patharg (bitcoin/bitcoin#24306, bitcoin/bitcoin#15934) pr/pollbug (bitcoin/bitcoin#15934) pr/pool (bitcoin/bitcoin#15719, bitcoin/bitcoin#15934) pr/pool.10-rebase (bitcoin/bitcoin#15934) pr/pool.11-rebase (bitcoin/bitcoin#15934) pr/pool.12-rebase (bitcoin/bitcoin#15934) pr/pool.13-rebase (bitcoin/bitcoin#15934) pr/pool.14-rebase (bitcoin/bitcoin#15934) pr/pool.16-rebase (bitcoin/bitcoin#15934) pr/pool.19-rebase (bitcoin/bitcoin#15934) pr/pool.20-rebase (bitcoin/bitcoin#15934) pr/pool.21-rebase (bitcoin/bitcoin#15934) pr/pool.23-rebase (bitcoin/bitcoin#15934) pr/pool.26-rebase (bitcoin/bitcoin#15934) pr/pool.27-rebase (bitcoin/bitcoin#15934) pr/pool.28-rebase (bitcoin/bitcoin#15934) pr/pool.29-rebase (bitcoin/bitcoin#15934) pr/pool.30-rebase (bitcoin/bitcoin#15934) pr/pool.31-rebase (bitcoin/bitcoin#15934) pr/pool.32-rebase (bitcoin/bitcoin#15934) pr/pool.35-rebase (bitcoin/bitcoin#15934) pr/pool.36-rebase (bitcoin/bitcoin#15934) pr/pool.37-rebase (bitcoin/bitcoin#15934) pr/pool.38-rebase (bitcoin/bitcoin#15934) pr/pool.39-rebase (bitcoin/bitcoin#15934) pr/pool.40-rebase (bitcoin/bitcoin#15934) pr/pool.7-rebase (bitcoin/bitcoin#15934) pr/pool.8-rebase (bitcoin/bitcoin#15934) pr/pool.9-rebase (bitcoin/bitcoin#15934) pr/provide (bitcoin/bitcoin#15934) pr/provide.1-rebase (bitcoin/bitcoin#15934) pr/qtset (bitcoin/bitcoin#15936, bitcoin/bitcoin#15934) pr/qtset.10-rebase (bitcoin/bitcoin#15934) pr/qtset.11-rebase (bitcoin/bitcoin#15934) pr/qtset.12-rebase (bitcoin/bitcoin#15934) pr/qtset.15-rebase (bitcoin/bitcoin#15934) pr/qtset.16-rebase (bitcoin/bitcoin#15934) pr/qtset.17-rebase (bitcoin/bitcoin#15934) pr/qtset.19-rebase (bitcoin/bitcoin#15934) pr/qtset.20-rebase (bitcoin/bitcoin#15934) pr/qtset.21-rebase (bitcoin/bitcoin#15934) pr/qtset.22-rebase (bitcoin/bitcoin#15934) pr/qtset.23-rebase (bitcoin/bitcoin#15934) pr/qtset.25-rebase (bitcoin/bitcoin#15934) pr/qtset.26-rebase (bitcoin/bitcoin#15934) pr/qtset.27-rebase (bitcoin/bitcoin#15934) pr/qtset.5-rebase (bitcoin/bitcoin#15934) pr/qtset.7-rebase (bitcoin/bitcoin#15934) pr/qtset.8-rebase (bitcoin/bitcoin#15934) pr/qtset.9-rebase (bitcoin/bitcoin#15934) pr/qtwd (bitcoin/bitcoin#15934) pr/qtx (bitcoin/bitcoin#15934) pr/qtx.3-rebase (bitcoin/bitcoin#15934) pr/qtx.4-rebase (bitcoin/bitcoin#15934) pr/qtx.5-rebase (bitcoin/bitcoin#15934) pr/qtx.7-rebase (bitcoin/bitcoin#15934) pr/reconstruct (bitcoin/bitcoin#15934) pr/rev (bitcoin/bitcoin#15934) pr/rev.1-rebase (bitcoin/bitcoin#15934) pr/rwset (bitcoin/bitcoin#15934) pr/rwset.10-rebase (bitcoin/bitcoin#15934) pr/rwset.12-rebase (bitcoin/bitcoin#15934) pr/rwset.13-rebase (bitcoin/bitcoin#15934) pr/rwset.5-rebase (bitcoin/bitcoin#15934) pr/rwset.6-rebase (bitcoin/bitcoin#15934) pr/sfix (bitcoin/bitcoin#15934) pr/simpreq (bitcoin/bitcoin#15934) pr/simpreq.1-rebase (bitcoin/bitcoin#15934) pr/sql (bitcoin/bitcoin#15934) pr/sql-orig (bitcoin/bitcoin#15934) pr/sql.2-rebase (bitcoin/bitcoin#15934) pr/sql.3-rebase (bitcoin/bitcoin#15934) pr/sql.4-rebase (bitcoin/bitcoin#15934) pr/stdfs (bitcoin/bitcoin#15934) pr/subfee (bitcoin/bitcoin#15934) pr/subfee.3-rebase (bitcoin/bitcoin#15934) pr/subfee.5-rebase (bitcoin/bitcoin#15934) pr/sysroot (bitcoin/bitcoin#15934) pr/throt (bitcoin/bitcoin#15934) pr/txfun (bitcoin/bitcoin#15934) pr/txfun.1-rebase (bitcoin/bitcoin#15934) pr/txfun.2-rebase (bitcoin/bitcoin#15934) pr/txfun.3-rebase (bitcoin/bitcoin#15934) pr/txfun.4-rebase (bitcoin/bitcoin#15934) pr/txfun.5-rebase (bitcoin/bitcoin#15934) pr/txfun.6-rebase (bitcoin/bitcoin#15934) pr/txmove (bitcoin/bitcoin#15934) pr/txmove.1-rebase (bitcoin/bitcoin#15934) pr/txmove.2-rebase (bitcoin/bitcoin#15934) pr/txmove.3-rebase (bitcoin/bitcoin#15934) pr/txmove.4-rebase (bitcoin/bitcoin#15934) pr/txmove.5-rebase (bitcoin/bitcoin#15934) pr/txmove.6-rebase (bitcoin/bitcoin#15934) pr/txmove.7-rebase (bitcoin/bitcoin#15934) pr/txmove.8-rebase (bitcoin/bitcoin#15934) pr/txstate (bitcoin/bitcoin#15934) pr/txstate.10-rebase (bitcoin/bitcoin#15934) pr/txstate.11-rebase (bitcoin/bitcoin#15934) pr/txstate.12-rebase (bitcoin/bitcoin#15934) pr/txstate.13-rebase (bitcoin/bitcoin#15934) pr/txstate.14-rebase (bitcoin/bitcoin#15934) pr/txstate.16-rebase (bitcoin/bitcoin#15934) pr/txstate.17-rebase (bitcoin/bitcoin#15934) pr/txstate.18-rebase (bitcoin/bitcoin#15934) pr/txstate.19-rebase (bitcoin/bitcoin#15934) pr/txstate.2-rebase (bitcoin/bitcoin#15934) pr/txstate.20-rebase (bitcoin/bitcoin#15934) pr/txstate.21-rebase (bitcoin/bitcoin#15934) pr/txstate.22-rebase (bitcoin/bitcoin#15934) pr/txstate.23-rebase (bitcoin/bitcoin#15934) pr/txstate.24-rebase (bitcoin/bitcoin#15934) pr/txstate.3-rebase (bitcoin/bitcoin#15934) pr/txstate.4-rebase (bitcoin/bitcoin#15934) pr/txstate.5-rebase (bitcoin/bitcoin#15934) pr/txstate.6-rebase (bitcoin/bitcoin#15934) pr/txstate.7-rebase (bitcoin/bitcoin#15934) pr/txstate.8-rebase (bitcoin/bitcoin#15934) pr/txstate.9-rebase (bitcoin/bitcoin#15934) pr/txwait (bitcoin/bitcoin#15934) pr/u8path (bitcoin/bitcoin#15934) pr/u8path.1-rebase (bitcoin/bitcoin#15934) pr/u8path.11-rebase (bitcoin/bitcoin#15934) pr/u8path.15-rebase (bitcoin/bitcoin#15934) pr/u8path.16-rebase (bitcoin/bitcoin#15934) pr/unlock (bitcoin/bitcoin#15934) pr/unlock.12-rebase (bitcoin/bitcoin#15934) pr/unlock.13-rebase (bitcoin/bitcoin#15934) pr/unlock.15-rebase (bitcoin/bitcoin#15934) pr/valfix (bitcoin/bitcoin#15934) pr/walset (bitcoin/bitcoin#15934) pr/walset.10-rebase (bitcoin/bitcoin#15934) pr/walset.11-rebase (bitcoin/bitcoin#15934) pr/walset.12-rebase (bitcoin/bitcoin#15934) pr/walset.13-rebase (bitcoin/bitcoin#15934) pr/walset.15-rebase (bitcoin/bitcoin#15934) pr/walset.6-rebase (bitcoin/bitcoin#15934) pr/walset.8-rebase (bitcoin/bitcoin#15934) pr/walset.9-rebase (bitcoin/bitcoin#15934) pr/wargs (bitcoin/bitcoin#15934) pr/wc (bitcoin/bitcoin#15934) pr/wclient (bitcoin/bitcoin#15934) pr/wclient.1-rebase (bitcoin/bitcoin#15934) pr/wclient.10-rebase (bitcoin/bitcoin#15934) pr/wclient.11-rebase (bitcoin/bitcoin#15934) pr/wclient.2-rebase (bitcoin/bitcoin#15934) pr/wclient.3-rebase (bitcoin/bitcoin#15934) pr/wclient.4-rebase (bitcoin/bitcoin#15934) pr/wclient.5-rebase (bitcoin/bitcoin#15934) pr/wclient.6-rebase (bitcoin/bitcoin#15934) pr/wclient.7-rebase (bitcoin/bitcoin#15934) pr/wclient.8-rebase (bitcoin/bitcoin#15934) pr/wclient.9-rebase (bitcoin/bitcoin#15934) pr/wdlist (bitcoin/bitcoin#17580, bitcoin/bitcoin#15934) pr/wdlist.10-rebase (bitcoin/bitcoin#15934) pr/wdlist.11-rebase (bitcoin/bitcoin#15934) pr/wdlist.3-rebase (bitcoin/bitcoin#15934) pr/wdlist.4-rebase (bitcoin/bitcoin#15934) pr/wdlist.6-rebase (bitcoin/bitcoin#15934) pr/wdlist.7-rebase (bitcoin/bitcoin#15934) pr/wdlist.9-rebase (bitcoin/bitcoin#15934) pr/wdmult (bitcoin/bitcoin#17493, bitcoin/bitcoin#15934) pr/wdmult.4-rebase (bitcoin/bitcoin#15934) pr/wdmult.5-rebase (bitcoin/bitcoin#15934) pr/wdmult.6-rebase (bitcoin/bitcoin#15934) pr/wdmult.7-rebase (bitcoin/bitcoin#15934) pr/wdnolist (bitcoin/bitcoin#17783, bitcoin/bitcoin#15934) pr/wdnolist.1-rebase (bitcoin/bitcoin#15934) pr/wdnolist.2-rebase (bitcoin/bitcoin#15934) pr/wdnolist.3-rebase (bitcoin/bitcoin#15934) pr/wdnolist.6-rebase (bitcoin/bitcoin#15934) pr/wdnolist.7-rebase (bitcoin/bitcoin#15934) pr/wdpy (bitcoin/bitcoin#15934) pr/wdpy.2-rebase (bitcoin/bitcoin#15934) pr/wdpy.4-rebase (bitcoin/bitcoin#15934) pr/wdqual (bitcoin/bitcoin#15934) pr/wdrev (bitcoin/bitcoin#17581, bitcoin/bitcoin#15934) pr/wdrev.2-rebase (bitcoin/bitcoin#15934) pr/wdrev.3-rebase (bitcoin/bitcoin#15934) pr/wdrev.4-rebase (bitcoin/bitcoin#15934) pr/wdrev.5-rebase (bitcoin/bitcoin#15934) pr/wdrev.6-rebase (bitcoin/bitcoin#15934) pr/wp (bitcoin/bitcoin#15934) review.13339.5-edit (bitcoin/bitcoin#15934) review.15454.2-edit (bitcoin/bitcoin#15934) review.15454.8-edit (bitcoin/bitcoin#15934) review.16426.4-edit (bitcoin/bitcoin#15934) review.16426.5-edit (bitcoin/bitcoin#15934) review.17373.6-fix (bitcoin/bitcoin#15934) review.17681.2-edit (bitcoin/bitcoin#15934) review.18112.2-edit (bitcoin/bitcoin#15934) review.18338.1-edit (bitcoin/bitcoin#15934) review.18551.1-edit (bitcoin/bitcoin#15934) review.18907.1-edit (bitcoin/bitcoin#15934) review.18926.1-edit (bitcoin/bitcoin#15934) review.19503.2-edit (bitcoin/bitcoin#15934) review.20459.1-edit (bitcoin/bitcoin#15934) review.20744.7-edit (bitcoin/bitcoin#15934) review.22928.1-edit (bitcoin/bitcoin#15934) review.23280.3-edit (bitcoin/bitcoin#15934) review.23732.2-edit (bitcoin/bitcoin#15934)
|
🐙 This pull request conflicts with the target branch and needs rebase. |
Concept ACK, please ping me to review when you rebase. |
CCoinsViewCache code cleanup & deduplication
The change moves code responsible for updating the cache out of various
CCoinsViewCache methods and into a Modifier class. This way the cache update
code is just written once in a general way instead of being duplicated and
split up to handle various special cases.
This is a refactoring, with changes to cache behavior only in 2 corner cases
(with corresponding tests in coins_test.cpp) which don't affect the meaning of
data stored in the cache:
In BatchWrite, overwriting a non-dirty pruned cache entry with a fresh pruned
cache entry now deletes the cache entry instead of leaving behind a dirty
pruned entry that will trigger an unnecessary database write later.
In BatchWrite, overwriting a dirty pruned fresh cache entry with a nonpruned
entry updates the entry without dropping the fresh flag. There's no reason to
drop the fresh flag in this case because the flag accurately describes the
state of the base view and could prevent unnecessary database writes in the
future if the utxo is spent later.