mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-13 07:23:21 +02:00
blockstorage: Add DeletePruneLock
Also adds basic unit test coverage for prune lock management methods.
This commit is contained in:
@@ -404,6 +404,12 @@ void BlockManager::UpdatePruneLock(const std::string& name, const PruneLockInfo&
|
||||
m_prune_locks[name] = lock_info;
|
||||
}
|
||||
|
||||
bool BlockManager::DeletePruneLock(const std::string& name)
|
||||
{
|
||||
AssertLockHeld(::cs_main);
|
||||
return m_prune_locks.erase(name) > 0;
|
||||
}
|
||||
|
||||
CBlockIndex* BlockManager::InsertBlockIndex(const uint256& hash)
|
||||
{
|
||||
AssertLockHeld(cs_main);
|
||||
|
||||
@@ -455,6 +455,9 @@ public:
|
||||
//! Create or update a prune lock identified by its name
|
||||
void UpdatePruneLock(const std::string& name, const PruneLockInfo& lock_info) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||
|
||||
//! Delete a prune lock identified by its name. Returns true if the lock existed.
|
||||
bool DeletePruneLock(const std::string& name) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||
|
||||
/** Open a block file (blk?????.dat) */
|
||||
AutoFile OpenBlockFile(const FlatFilePos& pos, bool fReadOnly) const;
|
||||
|
||||
|
||||
@@ -300,4 +300,26 @@ BOOST_AUTO_TEST_CASE(blockmanager_flush_block_file)
|
||||
BOOST_CHECK_EQUAL(read_block.nVersion, 2);
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(prune_lock_update_and_delete, TestingSetup)
|
||||
{
|
||||
LOCK(::cs_main);
|
||||
auto& chainman{*Assert(m_node.chainman)};
|
||||
auto& blockman{chainman.m_blockman};
|
||||
|
||||
// Create a prune lock
|
||||
blockman.UpdatePruneLock("test_lock", node::PruneLockInfo{.height_first = 100});
|
||||
|
||||
// Update it to a new height
|
||||
blockman.UpdatePruneLock("test_lock", node::PruneLockInfo{.height_first = 200});
|
||||
|
||||
// Delete existing prune lock
|
||||
BOOST_CHECK(blockman.DeletePruneLock("test_lock"));
|
||||
|
||||
// Verify deletion worked by trying to delete the same lock again
|
||||
BOOST_CHECK(!blockman.DeletePruneLock("test_lock"));
|
||||
|
||||
// Deleting a non-existent lock returns false
|
||||
BOOST_CHECK(!blockman.DeletePruneLock("nonexistent"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user