Deletes test_mid_package_eviction
that is brittle and already covered in other places. It was introduced in #28251 addressing 2 issues: (1) calling LimitMempoolSize()
in the middle of package validation and (2) not updating coins view cache when the mempool contents change, leading to “disappearing coins.”
(1) If you let AcceptSingleTransaction
call LimitMempoolSize
in the middle of package validation, you should get a failure in test_mid_package_eviction_success
(the package is rejected):
0diff --git a/src/validation.cpp b/src/validation.cpp
1index f2f6098e214..4bd6f059849 100644
2--- a/src/validation.cpp
3+++ b/src/validation.cpp
4@@ -1485,7 +1485,7 @@ MempoolAcceptResult MemPoolAccept::AcceptSingleTransaction(const CTransactionRef
5 FinalizeSubpackage(args);
6
7 // Limit the mempool, if appropriate.
8- if (!args.m_package_submission && !args.m_bypass_limits) {
9+ if (!args.m_bypass_limits) {
10 LimitMempoolSize(m_pool, m_active_chainstate.CoinsTip());
11 // If mempool contents change, then the m_view cache is dirty. Given this isn't a package
12 // submission, we won't be using the cache anymore, but clear it anyway for clarity.
Mempool modifications have a pretty narrow interface since #31122 and TrimToSize()
cannot be called while there is an outstanding mempool changeset. So I think there is a low likelihood of accidentally reintroducing this problem and not immediately hitting e.g. a fuzzer crash on this line https://github.com/bitcoin/bitcoin/blob/b53fab1467fde73c40402e2022b25edfff1e4668/src/txmempool.cpp#L1143
(2) If you remove the CleanupTemporaryCoins()
call from ClearSubPackageState()
you should get a failure from test_mid_package_replacement
:
0diff --git a/src/validation.cpp b/src/validation.cpp
1index f2f6098e214..01b904b69ef 100644
2--- a/src/validation.cpp
3+++ b/src/validation.cpp
4@@ -779,7 +779,7 @@ private:
5 m_subpackage = SubPackageState{};
6
7 // And clean coins while at it
8- CleanupTemporaryCoins();
9+ // CleanupTemporaryCoins();
10 }
11 };
I also added/cleaned up the documentation about coins views to hopefully make it extremely clear when people should CleanupTemporaryCoins
.