aboutsummaryrefslogtreecommitdiff
path: root/src/txdb.cpp
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2023-09-05 11:22:10 +0100
committerfanquake <fanquake@gmail.com>2023-09-05 11:37:35 +0100
commitecab855838fa4de4c6d8c11e69037477d6047790 (patch)
tree4034b5ca654f05554bfc770f2912394c1aab57f1 /src/txdb.cpp
parent8c7e7354561d73e24b03ab40780010508fad1401 (diff)
parentfae405556d56f6f13ce57f69a06b9ec1e825422b (diff)
downloadbitcoin-ecab855838fa4de4c6d8c11e69037477d6047790.tar.xz
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.cpp127
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;
-}