mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-23 15:22:46 +02:00
move-only: Move ThreadImport to blockstorage
Can be reviewed with the git options --color-moved=dimmed-zebra --color-moved-ws=ignore-all-space
This commit is contained in:
parent
faf843c07f
commit
fa413f07a1
@ -174,6 +174,7 @@ BITCOIN_CORE_H = \
|
|||||||
netaddress.h \
|
netaddress.h \
|
||||||
netbase.h \
|
netbase.h \
|
||||||
netmessagemaker.h \
|
netmessagemaker.h \
|
||||||
|
node/blockstorage.h \
|
||||||
node/coin.h \
|
node/coin.h \
|
||||||
node/coinstats.h \
|
node/coinstats.h \
|
||||||
node/context.h \
|
node/context.h \
|
||||||
@ -324,6 +325,7 @@ libbitcoin_server_a_SOURCES = \
|
|||||||
miner.cpp \
|
miner.cpp \
|
||||||
net.cpp \
|
net.cpp \
|
||||||
net_processing.cpp \
|
net_processing.cpp \
|
||||||
|
node/blockstorage.cpp \
|
||||||
node/coin.cpp \
|
node/coin.cpp \
|
||||||
node/coinstats.cpp \
|
node/coinstats.cpp \
|
||||||
node/context.cpp \
|
node/context.cpp \
|
||||||
|
89
src/init.cpp
89
src/init.cpp
@ -16,7 +16,6 @@
|
|||||||
#include <chain.h>
|
#include <chain.h>
|
||||||
#include <chainparams.h>
|
#include <chainparams.h>
|
||||||
#include <compat/sanity.h>
|
#include <compat/sanity.h>
|
||||||
#include <consensus/validation.h>
|
|
||||||
#include <fs.h>
|
#include <fs.h>
|
||||||
#include <hash.h>
|
#include <hash.h>
|
||||||
#include <httprpc.h>
|
#include <httprpc.h>
|
||||||
@ -32,6 +31,7 @@
|
|||||||
#include <net_permissions.h>
|
#include <net_permissions.h>
|
||||||
#include <net_processing.h>
|
#include <net_processing.h>
|
||||||
#include <netbase.h>
|
#include <netbase.h>
|
||||||
|
#include <node/blockstorage.h>
|
||||||
#include <node/context.h>
|
#include <node/context.h>
|
||||||
#include <node/ui_interface.h>
|
#include <node/ui_interface.h>
|
||||||
#include <policy/feerate.h>
|
#include <policy/feerate.h>
|
||||||
@ -61,7 +61,6 @@
|
|||||||
#include <util/threadnames.h>
|
#include <util/threadnames.h>
|
||||||
#include <util/translation.h>
|
#include <util/translation.h>
|
||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
|
|
||||||
#include <validationinterface.h>
|
#include <validationinterface.h>
|
||||||
#include <walletinitinterface.h>
|
#include <walletinitinterface.h>
|
||||||
|
|
||||||
@ -90,7 +89,6 @@
|
|||||||
|
|
||||||
static const bool DEFAULT_PROXYRANDOMIZE = true;
|
static const bool DEFAULT_PROXYRANDOMIZE = true;
|
||||||
static const bool DEFAULT_REST_ENABLE = false;
|
static const bool DEFAULT_REST_ENABLE = false;
|
||||||
static const bool DEFAULT_STOPAFTERBLOCKIMPORT = false;
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// Win32 LevelDB doesn't use filedescriptors, and the ones used for
|
// Win32 LevelDB doesn't use filedescriptors, and the ones used for
|
||||||
@ -625,20 +623,6 @@ static void BlockNotifyGenesisWait(const CBlockIndex* pBlockIndex)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CImportingNow
|
|
||||||
{
|
|
||||||
CImportingNow() {
|
|
||||||
assert(fImporting == false);
|
|
||||||
fImporting = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
~CImportingNow() {
|
|
||||||
assert(fImporting == true);
|
|
||||||
fImporting = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// If we're using -prune with -reindex, then delete block files that will be ignored by the
|
// If we're using -prune with -reindex, then delete block files that will be ignored by the
|
||||||
// reindex. Since reindexing works by starting at block file 0 and looping until a blockfile
|
// reindex. Since reindexing works by starting at block file 0 and looping until a blockfile
|
||||||
// is missing, do the same here to delete any later block files after a gap. Also delete all
|
// is missing, do the same here to delete any later block files after a gap. Also delete all
|
||||||
@ -691,77 +675,6 @@ static void StartupNotify(const ArgsManager& args)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void ThreadImport(ChainstateManager& chainman, std::vector<fs::path> vImportFiles, const ArgsManager& args)
|
|
||||||
{
|
|
||||||
const CChainParams& chainparams = Params();
|
|
||||||
ScheduleBatchPriority();
|
|
||||||
|
|
||||||
{
|
|
||||||
CImportingNow imp;
|
|
||||||
|
|
||||||
// -reindex
|
|
||||||
if (fReindex) {
|
|
||||||
int nFile = 0;
|
|
||||||
while (true) {
|
|
||||||
FlatFilePos pos(nFile, 0);
|
|
||||||
if (!fs::exists(GetBlockPosFilename(pos)))
|
|
||||||
break; // No block files left to reindex
|
|
||||||
FILE *file = OpenBlockFile(pos, true);
|
|
||||||
if (!file)
|
|
||||||
break; // This error is logged in OpenBlockFile
|
|
||||||
LogPrintf("Reindexing block file blk%05u.dat...\n", (unsigned int)nFile);
|
|
||||||
::ChainstateActive().LoadExternalBlockFile(chainparams, file, &pos);
|
|
||||||
if (ShutdownRequested()) {
|
|
||||||
LogPrintf("Shutdown requested. Exit %s\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
nFile++;
|
|
||||||
}
|
|
||||||
pblocktree->WriteReindexing(false);
|
|
||||||
fReindex = false;
|
|
||||||
LogPrintf("Reindexing finished\n");
|
|
||||||
// To avoid ending up in a situation without genesis block, re-try initializing (no-op if reindexing worked):
|
|
||||||
::ChainstateActive().LoadGenesisBlock(chainparams);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -loadblock=
|
|
||||||
for (const fs::path& path : vImportFiles) {
|
|
||||||
FILE *file = fsbridge::fopen(path, "rb");
|
|
||||||
if (file) {
|
|
||||||
LogPrintf("Importing blocks file %s...\n", path.string());
|
|
||||||
::ChainstateActive().LoadExternalBlockFile(chainparams, file);
|
|
||||||
if (ShutdownRequested()) {
|
|
||||||
LogPrintf("Shutdown requested. Exit %s\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LogPrintf("Warning: Could not open blocks file %s\n", path.string());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// scan for better chains in the block chain database, that are not yet connected in the active best chain
|
|
||||||
|
|
||||||
// We can't hold cs_main during ActivateBestChain even though we're accessing
|
|
||||||
// the chainman unique_ptrs since ABC requires us not to be holding cs_main, so retrieve
|
|
||||||
// the relevant pointers before the ABC call.
|
|
||||||
for (CChainState* chainstate : WITH_LOCK(::cs_main, return chainman.GetAll())) {
|
|
||||||
BlockValidationState state;
|
|
||||||
if (!chainstate->ActivateBestChain(state, chainparams, nullptr)) {
|
|
||||||
LogPrintf("Failed to connect best block (%s)\n", state.ToString());
|
|
||||||
StartShutdown();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.GetBoolArg("-stopafterblockimport", DEFAULT_STOPAFTERBLOCKIMPORT)) {
|
|
||||||
LogPrintf("Stopping after block import\n");
|
|
||||||
StartShutdown();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} // End scope of CImportingNow
|
|
||||||
chainman.ActiveChainstate().LoadMempool(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Sanity checks
|
/** Sanity checks
|
||||||
* Ensure that Bitcoin is running in a usable environment with all
|
* Ensure that Bitcoin is running in a usable environment with all
|
||||||
* necessary library support.
|
* necessary library support.
|
||||||
|
96
src/node/blockstorage.cpp
Normal file
96
src/node/blockstorage.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
// Copyright (c) 2011-2021 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include <blockstorage.h>
|
||||||
|
|
||||||
|
#include <chainparams.h>
|
||||||
|
#include <fs.h>
|
||||||
|
#include <shutdown.h>
|
||||||
|
#include <util/system.h>
|
||||||
|
#include <validation.h>
|
||||||
|
|
||||||
|
struct CImportingNow {
|
||||||
|
CImportingNow()
|
||||||
|
{
|
||||||
|
assert(fImporting == false);
|
||||||
|
fImporting = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
~CImportingNow()
|
||||||
|
{
|
||||||
|
assert(fImporting == true);
|
||||||
|
fImporting = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void ThreadImport(ChainstateManager& chainman, std::vector<fs::path> vImportFiles, const ArgsManager& args)
|
||||||
|
{
|
||||||
|
const CChainParams& chainparams = Params();
|
||||||
|
ScheduleBatchPriority();
|
||||||
|
|
||||||
|
{
|
||||||
|
CImportingNow imp;
|
||||||
|
|
||||||
|
// -reindex
|
||||||
|
if (fReindex) {
|
||||||
|
int nFile = 0;
|
||||||
|
while (true) {
|
||||||
|
FlatFilePos pos(nFile, 0);
|
||||||
|
if (!fs::exists(GetBlockPosFilename(pos)))
|
||||||
|
break; // No block files left to reindex
|
||||||
|
FILE* file = OpenBlockFile(pos, true);
|
||||||
|
if (!file)
|
||||||
|
break; // This error is logged in OpenBlockFile
|
||||||
|
LogPrintf("Reindexing block file blk%05u.dat...\n", (unsigned int)nFile);
|
||||||
|
::ChainstateActive().LoadExternalBlockFile(chainparams, file, &pos);
|
||||||
|
if (ShutdownRequested()) {
|
||||||
|
LogPrintf("Shutdown requested. Exit %s\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
nFile++;
|
||||||
|
}
|
||||||
|
pblocktree->WriteReindexing(false);
|
||||||
|
fReindex = false;
|
||||||
|
LogPrintf("Reindexing finished\n");
|
||||||
|
// To avoid ending up in a situation without genesis block, re-try initializing (no-op if reindexing worked):
|
||||||
|
::ChainstateActive().LoadGenesisBlock(chainparams);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -loadblock=
|
||||||
|
for (const fs::path& path : vImportFiles) {
|
||||||
|
FILE* file = fsbridge::fopen(path, "rb");
|
||||||
|
if (file) {
|
||||||
|
LogPrintf("Importing blocks file %s...\n", path.string());
|
||||||
|
::ChainstateActive().LoadExternalBlockFile(chainparams, file);
|
||||||
|
if (ShutdownRequested()) {
|
||||||
|
LogPrintf("Shutdown requested. Exit %s\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LogPrintf("Warning: Could not open blocks file %s\n", path.string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scan for better chains in the block chain database, that are not yet connected in the active best chain
|
||||||
|
|
||||||
|
// We can't hold cs_main during ActivateBestChain even though we're accessing
|
||||||
|
// the chainman unique_ptrs since ABC requires us not to be holding cs_main, so retrieve
|
||||||
|
// the relevant pointers before the ABC call.
|
||||||
|
for (CChainState* chainstate : WITH_LOCK(::cs_main, return chainman.GetAll())) {
|
||||||
|
BlockValidationState state;
|
||||||
|
if (!chainstate->ActivateBestChain(state, chainparams, nullptr)) {
|
||||||
|
LogPrintf("Failed to connect best block (%s)\n", state.ToString());
|
||||||
|
StartShutdown();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.GetBoolArg("-stopafterblockimport", DEFAULT_STOPAFTERBLOCKIMPORT)) {
|
||||||
|
LogPrintf("Stopping after block import\n");
|
||||||
|
StartShutdown();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} // End scope of CImportingNow
|
||||||
|
chainman.ActiveChainstate().LoadMempool(args);
|
||||||
|
}
|
19
src/node/blockstorage.h
Normal file
19
src/node/blockstorage.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright (c) 2011-2021 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_NODE_BLOCKSTORAGE_H
|
||||||
|
#define BITCOIN_NODE_BLOCKSTORAGE_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <fs.h>
|
||||||
|
|
||||||
|
class ArgsManager;
|
||||||
|
class ChainstateManager;
|
||||||
|
|
||||||
|
static constexpr bool DEFAULT_STOPAFTERBLOCKIMPORT{false};
|
||||||
|
|
||||||
|
void ThreadImport(ChainstateManager& chainman, std::vector<fs::path> vImportFiles, const ArgsManager& args);
|
||||||
|
|
||||||
|
#endif // BITCOIN_NODE_BLOCKSTORAGE_H
|
Loading…
x
Reference in New Issue
Block a user