mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-27 11:43:26 -03:00
validation: Make DumpMempool(...) and LoadMempool(...) easier to test/fuzz/mock
This commit is contained in:
parent
af322c7494
commit
91af6b97c9
2 changed files with 9 additions and 7 deletions
|
@ -5010,11 +5010,11 @@ CBlockFileInfo* GetBlockFileInfo(size_t n)
|
||||||
|
|
||||||
static const uint64_t MEMPOOL_DUMP_VERSION = 1;
|
static const uint64_t MEMPOOL_DUMP_VERSION = 1;
|
||||||
|
|
||||||
bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate)
|
bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate, FopenFn mockable_fopen_function)
|
||||||
{
|
{
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
int64_t nExpiryTimeout = gArgs.GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60;
|
int64_t nExpiryTimeout = gArgs.GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60;
|
||||||
FILE* filestr = fsbridge::fopen(GetDataDir() / "mempool.dat", "rb");
|
FILE* filestr{mockable_fopen_function(GetDataDir() / "mempool.dat", "rb")};
|
||||||
CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);
|
CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);
|
||||||
if (file.IsNull()) {
|
if (file.IsNull()) {
|
||||||
LogPrintf("Failed to open mempool file from disk. Continuing anyway.\n");
|
LogPrintf("Failed to open mempool file from disk. Continuing anyway.\n");
|
||||||
|
@ -5095,7 +5095,7 @@ bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DumpMempool(const CTxMemPool& pool)
|
bool DumpMempool(const CTxMemPool& pool, FopenFn mockable_fopen_function, bool skip_file_commit)
|
||||||
{
|
{
|
||||||
int64_t start = GetTimeMicros();
|
int64_t start = GetTimeMicros();
|
||||||
|
|
||||||
|
@ -5118,7 +5118,7 @@ bool DumpMempool(const CTxMemPool& pool)
|
||||||
int64_t mid = GetTimeMicros();
|
int64_t mid = GetTimeMicros();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FILE* filestr = fsbridge::fopen(GetDataDir() / "mempool.dat.new", "wb");
|
FILE* filestr{mockable_fopen_function(GetDataDir() / "mempool.dat.new", "wb")};
|
||||||
if (!filestr) {
|
if (!filestr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -5141,7 +5141,7 @@ bool DumpMempool(const CTxMemPool& pool)
|
||||||
LogPrintf("Writing %d unbroadcast transactions to disk.\n", unbroadcast_txids.size());
|
LogPrintf("Writing %d unbroadcast transactions to disk.\n", unbroadcast_txids.size());
|
||||||
file << unbroadcast_txids;
|
file << unbroadcast_txids;
|
||||||
|
|
||||||
if (!FileCommit(file.Get()))
|
if (!skip_file_commit && !FileCommit(file.Get()))
|
||||||
throw std::runtime_error("FileCommit failed");
|
throw std::runtime_error("FileCommit failed");
|
||||||
file.fclose();
|
file.fclose();
|
||||||
if (!RenameOver(GetDataDir() / "mempool.dat.new", GetDataDir() / "mempool.dat")) {
|
if (!RenameOver(GetDataDir() / "mempool.dat.new", GetDataDir() / "mempool.dat")) {
|
||||||
|
|
|
@ -1013,11 +1013,13 @@ int32_t ComputeBlockVersion(const CBlockIndex* pindexPrev, const Consensus::Para
|
||||||
/** Get block file info entry for one block file */
|
/** Get block file info entry for one block file */
|
||||||
CBlockFileInfo* GetBlockFileInfo(size_t n);
|
CBlockFileInfo* GetBlockFileInfo(size_t n);
|
||||||
|
|
||||||
|
using FopenFn = std::function<FILE*(const fs::path&, const char*)>;
|
||||||
|
|
||||||
/** Dump the mempool to disk. */
|
/** Dump the mempool to disk. */
|
||||||
bool DumpMempool(const CTxMemPool& pool);
|
bool DumpMempool(const CTxMemPool& pool, FopenFn mockable_fopen_function = fsbridge::fopen, bool skip_file_commit = false);
|
||||||
|
|
||||||
/** Load the mempool from disk. */
|
/** Load the mempool from disk. */
|
||||||
bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate);
|
bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate, FopenFn mockable_fopen_function = fsbridge::fopen);
|
||||||
|
|
||||||
//! Check whether the block associated with this index entry is pruned or not.
|
//! Check whether the block associated with this index entry is pruned or not.
|
||||||
inline bool IsBlockPruned(const CBlockIndex* pblockindex)
|
inline bool IsBlockPruned(const CBlockIndex* pblockindex)
|
||||||
|
|
Loading…
Add table
Reference in a new issue