aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheCharlatan <seb.kung@gmail.com>2023-02-18 12:57:39 +0100
committerTheCharlatan <seb.kung@gmail.com>2023-05-10 19:07:42 +0200
commit02a0899527ba3d31329e56c791c9dbf36075bb84 (patch)
treeb2535958d42b97f1d5c5f819ca400a9741b90479
parenta498d699e3fdac5bfdb33020a1fd6c4a79989752 (diff)
downloadbitcoin-02a0899527ba3d31329e56c791c9dbf36075bb84.tar.xz
refactor, BlockManager: Replace fastprune from arg with options
Remove access to the global gArgs for the fastprune argument and replace it by adding a field to the existing BlockManager Options struct. When running `clang-tidy-diff` on this commit, there is a diagnostic error: `unknown type name 'uint64_t' [clang-diagnostic-error] uint64_t prune_target{0};`, which is fixed by including cstdint. This should eventually allow users of the BlockManager to not rely on the global gArgs and instead pass in their own options.
-rw-r--r--src/kernel/blockmanager_opts.h3
-rw-r--r--src/node/blockmanager_args.cpp2
-rw-r--r--src/node/blockstorage.cpp4
3 files changed, 7 insertions, 2 deletions
diff --git a/src/kernel/blockmanager_opts.h b/src/kernel/blockmanager_opts.h
index 5584a66e02..6fa9ddd8c9 100644
--- a/src/kernel/blockmanager_opts.h
+++ b/src/kernel/blockmanager_opts.h
@@ -5,6 +5,8 @@
#ifndef BITCOIN_KERNEL_BLOCKMANAGER_OPTS_H
#define BITCOIN_KERNEL_BLOCKMANAGER_OPTS_H
+#include <cstdint>
+
class CChainParams;
namespace kernel {
@@ -16,6 +18,7 @@ namespace kernel {
struct BlockManagerOpts {
const CChainParams& chainparams;
uint64_t prune_target{0};
+ bool fast_prune{false};
};
} // namespace kernel
diff --git a/src/node/blockmanager_args.cpp b/src/node/blockmanager_args.cpp
index 9c320243e1..179c3a4604 100644
--- a/src/node/blockmanager_args.cpp
+++ b/src/node/blockmanager_args.cpp
@@ -31,6 +31,8 @@ std::optional<bilingual_str> ApplyArgsManOptions(const ArgsManager& args, BlockM
}
opts.prune_target = nPruneTarget;
+ if (auto value{args.GetBoolArg("-fastprune")}) opts.fast_prune = *value;
+
return std::nullopt;
}
} // namespace node
diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp
index 7fc61444e5..a6758b8fc9 100644
--- a/src/node/blockstorage.cpp
+++ b/src/node/blockstorage.cpp
@@ -581,7 +581,7 @@ void BlockManager::UnlinkPrunedFiles(const std::set<int>& setFilesToPrune) const
FlatFileSeq BlockManager::BlockFileSeq() const
{
- return FlatFileSeq(gArgs.GetBlocksDirPath(), "blk", gArgs.GetBoolArg("-fastprune", false) ? 0x4000 /* 16kb */ : BLOCKFILE_CHUNK_SIZE);
+ return FlatFileSeq(gArgs.GetBlocksDirPath(), "blk", m_opts.fast_prune ? 0x4000 /* 16kb */ : BLOCKFILE_CHUNK_SIZE);
}
FlatFileSeq BlockManager::UndoFileSeq() const
@@ -619,7 +619,7 @@ bool BlockManager::FindBlockPos(FlatFilePos& pos, unsigned int nAddSize, unsigne
unsigned int max_blockfile_size{MAX_BLOCKFILE_SIZE};
// Use smaller blockfiles in test-only -fastprune mode - but avoid
// the possibility of having a block not fit into the block file.
- if (gArgs.GetBoolArg("-fastprune", false)) {
+ if (m_opts.fast_prune) {
max_blockfile_size = 0x10000; // 64kiB
if (nAddSize >= max_blockfile_size) {
// dynamically adjust the blockfile size to be larger than the added size