aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/init.cpp5
-rwxr-xr-xtest/functional/rpc_blockchain.py8
2 files changed, 11 insertions, 2 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 2f7c6588b8..090a11a825 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1631,10 +1631,11 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
// On first startup, warn on low block storage space
if (!fReindex && !fReindexChainState && chain_active_height <= 1) {
+ uint64_t assumed_chain_bytes{chainparams.AssumedBlockchainSize() * 1024 * 1024 * 1024};
uint64_t additional_bytes_needed{
chainman.m_blockman.IsPruneMode() ?
- chainman.m_blockman.GetPruneTarget() :
- chainparams.AssumedBlockchainSize() * 1024 * 1024 * 1024};
+ std::min(chainman.m_blockman.GetPruneTarget(), assumed_chain_bytes) :
+ assumed_chain_bytes};
if (!CheckDiskSpace(args.GetBlocksDirPath(), additional_bytes_needed)) {
InitWarning(strprintf(_(
diff --git a/test/functional/rpc_blockchain.py b/test/functional/rpc_blockchain.py
index 7a0cedb1f5..6022042c11 100755
--- a/test/functional/rpc_blockchain.py
+++ b/test/functional/rpc_blockchain.py
@@ -69,6 +69,7 @@ class BlockchainTest(BitcoinTestFramework):
def run_test(self):
self.wallet = MiniWallet(self.nodes[0])
+ self._test_prune_disk_space()
self.mine_chain()
self._test_max_future_block_time()
self.restart_node(
@@ -100,6 +101,13 @@ class BlockchainTest(BitcoinTestFramework):
self.generate(self.wallet, 1)
assert_equal(self.nodes[0].getblockchaininfo()['blocks'], HEIGHT)
+ def _test_prune_disk_space(self):
+ self.log.info("Test that a manually pruned node does not run into "
+ "integer overflow on first start up")
+ self.restart_node(0, extra_args=["-prune=1"])
+ self.log.info("Avoid warning when assumed chain size is enough")
+ self.restart_node(0, extra_args=["-prune=123456789"])
+
def _test_max_future_block_time(self):
self.stop_node(0)
self.log.info("A block tip of more than MAX_FUTURE_BLOCK_TIME in the future raises an error")