diff options
author | fanquake <fanquake@gmail.com> | 2023-09-05 11:22:10 +0100 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2023-09-05 11:37:35 +0100 |
commit | ecab855838fa4de4c6d8c11e69037477d6047790 (patch) | |
tree | 4034b5ca654f05554bfc770f2912394c1aab57f1 /src/txdb.cpp | |
parent | 8c7e7354561d73e24b03ab40780010508fad1401 (diff) | |
parent | fae405556d56f6f13ce57f69a06b9ec1e825422b (diff) |
Merge bitcoin/bitcoin#28195: blockstorage: Drop legacy -txindex check
fae405556d56f6f13ce57f69a06b9ec1e825422b scripted-diff: Rename CBlockTreeDB -> BlockTreeDB (MarcoFalke)
faf63039cce40f5cf8dea5a1d24945773c3433a1 Fixup style of moved code (MarcoFalke)
fa65111b99627289fd47dcfaa5197e0f09b8a50e move-only: Move CBlockTreeDB to node/blockstorage (MarcoFalke)
fa8685597e7302fc136f21b6dd3a4b187fa8e251 index: Drop legacy -txindex check (MarcoFalke)
fa69148a0a26c5054dbccdceeac8e117bf449275 scripted-diff: Use blocks_path where possible (MarcoFalke)
Pull request description:
The only reason for the check was to print a warning about an increase in storage use. Now that 22.x is EOL and everyone should have migrated (or decided to not care about storage use), remove the check.
Also, a move-only commit is included. (Rebased from https://github.com/bitcoin/bitcoin/pull/22242)
ACKs for top commit:
TheCharlatan:
ACK fae405556d56f6f13ce57f69a06b9ec1e825422b, though I lack historical context to really judge the second commit fa8685597e7302fc136f21b6dd3a4b187fa8e251.
stickies-v:
ACK fae405556d56f6f13ce57f69a06b9ec1e825422b
Tree-SHA512: 9da8f48767ae52d8e8e21c09a40c949cc0838794f1856cc5f58a91acd3f00a3bca818c8082242b3fdc9ca5badb09059570bb3870850d3807b75a8e23b5222da1
Diffstat (limited to 'src/txdb.cpp')
-rw-r--r-- | src/txdb.cpp | 127 |
1 files changed, 8 insertions, 119 deletions
diff --git a/src/txdb.cpp b/src/txdb.cpp index 538c4d8f07..e4a4b3bf72 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -5,49 +5,25 @@ #include <txdb.h> -#include <chain.h> +#include <coins.h> +#include <dbwrapper.h> #include <logging.h> -#include <pow.h> +#include <primitives/transaction.h> #include <random.h> +#include <serialize.h> #include <uint256.h> -#include <util/signalinterrupt.h> -#include <util/translation.h> #include <util/vector.h> -#include <stdint.h> +#include <cassert> +#include <cstdlib> +#include <iterator> +#include <utility> static constexpr uint8_t DB_COIN{'C'}; -static constexpr uint8_t DB_BLOCK_FILES{'f'}; -static constexpr uint8_t DB_BLOCK_INDEX{'b'}; - static constexpr uint8_t DB_BEST_BLOCK{'B'}; static constexpr uint8_t DB_HEAD_BLOCKS{'H'}; -static constexpr uint8_t DB_FLAG{'F'}; -static constexpr uint8_t DB_REINDEX_FLAG{'R'}; -static constexpr uint8_t DB_LAST_BLOCK{'l'}; - // Keys used in previous version that might still be found in the DB: static constexpr uint8_t DB_COINS{'c'}; -static constexpr uint8_t DB_TXINDEX_BLOCK{'T'}; -// uint8_t DB_TXINDEX{'t'} - -util::Result<void> CheckLegacyTxindex(CBlockTreeDB& block_tree_db) -{ - CBlockLocator ignored{}; - if (block_tree_db.Read(DB_TXINDEX_BLOCK, ignored)) { - return util::Error{_("The -txindex upgrade started by a previous version cannot be completed. Restart with the previous version or run a full -reindex.")}; - } - bool txindex_legacy_flag{false}; - block_tree_db.ReadFlag("txindex", txindex_legacy_flag); - if (txindex_legacy_flag) { - // Disable legacy txindex and warn once about occupied disk space - if (!block_tree_db.WriteFlag("txindex", false)) { - return util::Error{Untranslated("Failed to write block index db flag 'txindex'='0'")}; - } - return util::Error{_("The block index db contains a legacy 'txindex'. To clear the occupied disk space, run a full -reindex, otherwise ignore this error. This error message will not be displayed again.")}; - } - return {}; -} bool CCoinsViewDB::NeedsUpgrade() { @@ -178,25 +154,6 @@ size_t CCoinsViewDB::EstimateSize() const return m_db->EstimateSize(DB_COIN, uint8_t(DB_COIN + 1)); } -bool CBlockTreeDB::ReadBlockFileInfo(int nFile, CBlockFileInfo &info) { - return Read(std::make_pair(DB_BLOCK_FILES, nFile), info); -} - -bool CBlockTreeDB::WriteReindexing(bool fReindexing) { - if (fReindexing) - return Write(DB_REINDEX_FLAG, uint8_t{'1'}); - else - return Erase(DB_REINDEX_FLAG); -} - -void CBlockTreeDB::ReadReindexing(bool &fReindexing) { - fReindexing = Exists(DB_REINDEX_FLAG); -} - -bool CBlockTreeDB::ReadLastBlockFile(int &nFile) { - return Read(DB_LAST_BLOCK, nFile); -} - /** Specialization of CCoinsViewCursor to iterate over a CCoinsViewDB */ class CCoinsViewDBCursor: public CCoinsViewCursor { @@ -269,71 +226,3 @@ void CCoinsViewDBCursor::Next() keyTmp.first = entry.key; } } - -bool CBlockTreeDB::WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*> >& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo) { - CDBBatch batch(*this); - for (std::vector<std::pair<int, const CBlockFileInfo*> >::const_iterator it=fileInfo.begin(); it != fileInfo.end(); it++) { - batch.Write(std::make_pair(DB_BLOCK_FILES, it->first), *it->second); - } - batch.Write(DB_LAST_BLOCK, nLastFile); - for (std::vector<const CBlockIndex*>::const_iterator it=blockinfo.begin(); it != blockinfo.end(); it++) { - batch.Write(std::make_pair(DB_BLOCK_INDEX, (*it)->GetBlockHash()), CDiskBlockIndex(*it)); - } - return WriteBatch(batch, true); -} - -bool CBlockTreeDB::WriteFlag(const std::string &name, bool fValue) { - return Write(std::make_pair(DB_FLAG, name), fValue ? uint8_t{'1'} : uint8_t{'0'}); -} - -bool CBlockTreeDB::ReadFlag(const std::string &name, bool &fValue) { - uint8_t ch; - if (!Read(std::make_pair(DB_FLAG, name), ch)) - return false; - fValue = ch == uint8_t{'1'}; - return true; -} - -bool CBlockTreeDB::LoadBlockIndexGuts(const Consensus::Params& consensusParams, std::function<CBlockIndex*(const uint256&)> insertBlockIndex, const util::SignalInterrupt& interrupt) -{ - AssertLockHeld(::cs_main); - std::unique_ptr<CDBIterator> pcursor(NewIterator()); - pcursor->Seek(std::make_pair(DB_BLOCK_INDEX, uint256())); - - // Load m_block_index - while (pcursor->Valid()) { - if (interrupt) return false; - std::pair<uint8_t, uint256> key; - if (pcursor->GetKey(key) && key.first == DB_BLOCK_INDEX) { - CDiskBlockIndex diskindex; - if (pcursor->GetValue(diskindex)) { - // Construct block index object - CBlockIndex* pindexNew = insertBlockIndex(diskindex.ConstructBlockHash()); - pindexNew->pprev = insertBlockIndex(diskindex.hashPrev); - pindexNew->nHeight = diskindex.nHeight; - pindexNew->nFile = diskindex.nFile; - pindexNew->nDataPos = diskindex.nDataPos; - pindexNew->nUndoPos = diskindex.nUndoPos; - pindexNew->nVersion = diskindex.nVersion; - pindexNew->hashMerkleRoot = diskindex.hashMerkleRoot; - pindexNew->nTime = diskindex.nTime; - pindexNew->nBits = diskindex.nBits; - pindexNew->nNonce = diskindex.nNonce; - pindexNew->nStatus = diskindex.nStatus; - pindexNew->nTx = diskindex.nTx; - - if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits, consensusParams)) { - return error("%s: CheckProofOfWork failed: %s", __func__, pindexNew->ToString()); - } - - pcursor->Next(); - } else { - return error("%s: failed to read value", __func__); - } - } else { - break; - } - } - - return true; -} |