0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-09 10:43:19 -05:00

refactor: Add and use kernel::ImportMempoolOptions

This allows optional named arguments with default values.
This commit is contained in:
MarcoFalke 2023-04-13 10:52:40 +02:00
parent fa8866990d
commit fa20d734a2
No known key found for this signature in database
4 changed files with 11 additions and 5 deletions

View file

@ -1677,7 +1677,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
} }
// Load mempool from disk // Load mempool from disk
if (auto* pool{chainman.ActiveChainstate().GetMempool()}) { if (auto* pool{chainman.ActiveChainstate().GetMempool()}) {
LoadMempool(*pool, ShouldPersistMempool(args) ? MempoolPath(args) : fs::path{}, chainman.ActiveChainstate()); LoadMempool(*pool, ShouldPersistMempool(args) ? MempoolPath(args) : fs::path{}, chainman.ActiveChainstate(), {});
pool->SetLoadTried(!chainman.m_interrupt); pool->SetLoadTried(!chainman.m_interrupt);
} }
}); });

View file

@ -36,11 +36,11 @@ namespace kernel {
static const uint64_t MEMPOOL_DUMP_VERSION = 1; static const uint64_t MEMPOOL_DUMP_VERSION = 1;
bool LoadMempool(CTxMemPool& pool, const fs::path& load_path, Chainstate& active_chainstate, FopenFn mockable_fopen_function) bool LoadMempool(CTxMemPool& pool, const fs::path& load_path, Chainstate& active_chainstate, ImportMempoolOptions&& opts)
{ {
if (load_path.empty()) return false; if (load_path.empty()) return false;
FILE* filestr{mockable_fopen_function(load_path, "rb")}; FILE* filestr{opts.mockable_fopen_function(load_path, "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");

View file

@ -17,10 +17,13 @@ bool DumpMempool(const CTxMemPool& pool, const fs::path& dump_path,
fsbridge::FopenFn mockable_fopen_function = fsbridge::fopen, fsbridge::FopenFn mockable_fopen_function = fsbridge::fopen,
bool skip_file_commit = false); bool skip_file_commit = false);
struct ImportMempoolOptions {
fsbridge::FopenFn mockable_fopen_function{fsbridge::fopen};
};
/** Import the file and attempt to add its contents to the mempool. */ /** Import the file and attempt to add its contents to the mempool. */
bool LoadMempool(CTxMemPool& pool, const fs::path& load_path, bool LoadMempool(CTxMemPool& pool, const fs::path& load_path,
Chainstate& active_chainstate, Chainstate& active_chainstate,
fsbridge::FopenFn mockable_fopen_function = fsbridge::fopen); ImportMempoolOptions&& opts);
} // namespace kernel } // namespace kernel

View file

@ -48,7 +48,10 @@ FUZZ_TARGET(validation_load_mempool, .init = initialize_validation_load_mempool)
auto fuzzed_fopen = [&](const fs::path&, const char*) { auto fuzzed_fopen = [&](const fs::path&, const char*) {
return fuzzed_file_provider.open(); return fuzzed_file_provider.open();
}; };
(void)LoadMempool(pool, MempoolPath(g_setup->m_args), chainstate, fuzzed_fopen); (void)LoadMempool(pool, MempoolPath(g_setup->m_args), chainstate,
{
.mockable_fopen_function = fuzzed_fopen,
});
pool.SetLoadTried(true); pool.SetLoadTried(true);
(void)DumpMempool(pool, MempoolPath(g_setup->m_args), fuzzed_fopen, true); (void)DumpMempool(pool, MempoolPath(g_setup->m_args), fuzzed_fopen, true);
} }