elements/src/node
Andrew Chow bb136aaf2c
Merge bitcoin/bitcoin#26533: prune: scan and unlink already pruned block files on startup
3141eab9c6 test: add functional test for ScanAndUnlinkAlreadyPrunedFiles (Andrew Toth)
e252909e56 test: add unit test for ScanAndUnlinkAlreadyPrunedFiles (Andrew Toth)
77557dda4a prune: scan and unlink already pruned block files on startup (Andrew Toth)

Pull request description:

  There are a few cases where we can mark a block and undo file as pruned in our block index, but not actually remove the files from disk.
  1. If we call `FindFilesToPrune` or `FindFilesToPruneManual` and crash before `UnlinkPrunedFiles`.
  2. If on Windows there is an open file handle to the file somewhere else when calling `fs::remove` in `UnlinkPrunedFiles` (https://en.cppreference.com/w/cpp/filesystem/remove, https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-deletefilew#remarks). This could be from another process, or if we are calling `ReadBlockFromDisk`/`ReadRawBlockFromDisk` without having a lock on `cs_main` (which has been allowed since ccd8ef65f9).

  This PR mitigates this by scanning all pruned block files on startup after `LoadBlockIndexDB` and unlinking them again.

ACKs for top commit:
  achow101:
    ACK 3141eab9c6
  pablomartin4btc:
    re-ACK with added functional test 3141eab9c6.
  furszy:
    Code review ACK 3141eab9
  theStack:
    Code-review ACK 3141eab9c6

Tree-SHA512: 6c73bc57838ad1b7e5d441af3c4d6bf4c61c4382e2b86485e57fbb74a61240710c0ceeceb8b4834e610ecfa3175c6955c81ea4b2285fee11ca6383f472979d8d
2023-02-28 09:54:10 -05:00
..
blockstorage.cpp Merge bitcoin/bitcoin#26533: prune: scan and unlink already pruned block files on startup 2023-02-28 09:54:10 -05:00
blockstorage.h Merge bitcoin/bitcoin#26533: prune: scan and unlink already pruned block files on startup 2023-02-28 09:54:10 -05:00
caches.cpp scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
caches.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
chainstate.cpp init: Return more fitting ChainStateLoadStatus if verification was interrupted 2023-02-24 15:09:24 -05:00
chainstate.h doc: add explanation for fail_on_insufficient_dbcache 2023-02-24 15:11:27 -05:00
chainstatemanager_args.cpp refactor, validation: Add ChainstateManagerOpts db options 2023-02-10 04:39:11 -04:00
chainstatemanager_args.h Move ::nMinimumChainWork into ChainstateManager 2022-10-18 14:09:17 +02:00
coin.cpp Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
coin.h scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
coins_view_args.cpp refactor, txdb: Add CoinsViewOptions struct 2023-02-10 04:39:11 -04:00
coins_view_args.h refactor, txdb: Add CoinsViewOptions struct 2023-02-10 04:39:11 -04:00
connection_types.cpp [net] Move ConnectionType to its own file 2022-07-06 18:13:53 +02:00
connection_types.h [net] Move ConnectionType to its own file 2022-07-06 18:13:53 +02:00
context.cpp scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
context.h scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
database_args.cpp refactor, dbwrapper: Add DBParams and DBOptions structs 2023-02-10 04:39:11 -04:00
database_args.h refactor, dbwrapper: Add DBParams and DBOptions structs 2023-02-10 04:39:11 -04:00
eviction.cpp [net] Move eviction logic to its own file 2022-07-06 18:13:54 +02:00
eviction.h [net] Move eviction logic to its own file 2022-07-06 18:13:54 +02:00
interface_ui.cpp scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
interface_ui.h scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
interfaces.cpp Remove reindex special case from the progress bar label 2023-02-07 11:02:01 +01:00
mempool_args.cpp Merge bitcoin/bitcoin#25872: Fix issues when calling std::move(const&) 2022-08-31 08:38:24 +01:00
mempool_args.h scripted-diff: Move mempool_args to src/node 2022-08-02 15:31:01 +02:00
mempool_persist_args.cpp DumpMempool: Pass in dump_path, stop using gArgs 2022-07-15 11:30:50 -04:00
mempool_persist_args.h Move DEFAULT_PERSIST_MEMPOOL out of libbitcoinkernel 2022-07-15 12:26:20 -04:00
miner.cpp miner: don't re-apply default Options value if argument is unset 2023-01-16 18:58:11 +00:00
miner.h refactor: avoid duplicating BlockAssembler::Options members 2023-01-16 18:58:10 +00:00
minisketchwrapper.cpp Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
minisketchwrapper.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
psbt.cpp scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
psbt.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
README.md doc: Remove irrelevant link to GitHub 2021-04-06 09:34:21 +02:00
transaction.cpp Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
transaction.h scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
txreconciliation.cpp p2p, test, refactor: Minor code improvements 2022-11-14 11:49:49 +02:00
txreconciliation.h p2p, refactor: Switch to enum class for ReconciliationRegisterResult 2022-11-14 11:37:28 +02:00
utxo_snapshot.cpp refactor: Remove stray cs_main redundant declaration 2023-01-25 09:56:26 +01:00
utxo_snapshot.h refactor: Remove stray cs_main redundant declaration 2023-01-25 09:56:26 +01:00
validation_cache_args.cpp validationcaches: Use size_t for sizes 2022-08-03 12:03:28 -04:00
validation_cache_args.h validationcaches: Add and use ValidationCacheSizes 2022-08-03 12:03:27 -04:00

src/node/

The src/node/ directory contains code that needs to access node state (state in CChain, CBlockIndex, CCoinsView, CTxMemPool, and similar classes).

Code in src/node/ is meant to be segregated from code in src/wallet/ and src/qt/, to ensure wallet and GUI code changes don't interfere with node operation, to allow wallet and GUI code to run in separate processes, and to perhaps eventually allow wallet and GUI code to be maintained in separate source repositories.

As a rule of thumb, code in one of the src/node/, src/wallet/, or src/qt/ directories should avoid calling code in the other directories directly, and only invoke it indirectly through the more limited src/interfaces/ classes.

This directory is at the moment sparsely populated. Eventually more substantial files like src/validation.cpp and src/txmempool.cpp might be moved there.