8000 refactor, kernel: Remove gArgs accesses from dbwrapper and txdb by ryanofsky · Pull Request #25862 · bitcoin/bitcoin · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

refactor, kernel: Remove gArgs accesses from dbwrapper and txdb #25862

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 17, 2023

Conversation

ryanofsky
Copy link
Contributor
@ryanofsky ryanofsky commented Aug 17, 2022

Code in the libbitcoin_kernel library should not be calling ArgsManager methods or trying to read options from the command line. Instead it should just get options values from simple structs and function arguments that are passed in externally. This PR removes gArgs accesses from dbwrapper and txdb modules by defining appropriate options structs, and is a followup to PR's #25290 #25487 #25527 which remove other ArgsManager calls from kernel modules.

This PR does not change behavior in any way. It is a simpler alternative to #25623 because the only thing it does is remove gArgs references from kernel code. It avoids other unnecessary changes like adding options to the kernel API (they can be added separately later).

@ryanofsky
Copy link
Contributor Author
ryanofsky commented Aug 17, 2022

Rebased ba91ffa -> 841c3a1 (pr/dbargs.1 -> pr/dbargs.2, compare) due to conflicts with #25815 and #25077
Updated 841c3a1 -> b86aabc (pr/dbargs.2 -> pr/dbargs.3, compare) to fix some CI compile errors on some platforms
Updated b86aabc -> 13d466e (pr/dbargs.3 -> pr/dbargs.4, compare) to fix more CI compiler problems https://cirrus-ci.com/task/5035326870650880
Updated 13d466e -> 370189f (pr/dbargs.4 -> pr/dbargs.5, compare) updating bitcoin-chainstate example

@DrahtBot
Copy link
Contributor
DrahtBot commented Aug 17, 2022

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Reviews

See the guideline for information on the review process.

Type Reviewers
ACK TheCharlatan, furszy, achow101
Concept ACK theStack, hebasto

If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #26966 (index: blockfilter initial sync speedup, parallelize process by furszy)
  • #26762 (refactor: Make CCheckQueue RAII-styled by hebasto)
  • #24230 (indexes: Stop using node internal types and locking cs_main, improve sync logic by ryanofsky)
  • #24199 (Add cs_main annotation to WriteBatchSync(), drop lock in CDiskBlockIndex by jonatack)
  • #19463 (Prune locks by luke-jr)

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Aug 22, 2022
Move ChainstateManager options into m_options struct to simplify class
initialization, organize class members, and to name external option variables
differently than internal state variables.

This change was originally in bitcoin#25862, but it was suggested to split off in
bitcoin#25862 (comment) so it could
be merged earlier and reduce conflicts with other PRs.
Copy link
Contributor Author
@ryanofsky ryanofsky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebased 370189f -> 1c77e2e (pr/dbargs.5 -> pr/dbargs.6, compare) due to conflict with #25786

ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Aug 24, 2022
Move ChainstateManager options into m_options struct to simplify class
initialization, organize class members, and to name external option variables
differently than internal state variables.

This change was originally in bitcoin#25862, but it was suggested to split off in
bitcoin#25862 (comment) so it could
be merged earlier and reduce conflicts with other PRs.
maflcko pushed a commit to bitcoin-core/gui that referenced this pull request Aug 25, 2022
… into m_options struct

7bc33a8 refactor: Move ChainstateManager options into m_options struct (Ryan Ofsky)

Pull request description:

  Move `ChainstateManager` options into `m_options` struct to simplify class initialization, organize class members, and to name external option variables differently than internal state variables.

  This change was originally in #25862, but it was suggested to split off in bitcoin/bitcoin#25862 (comment) so it could be merged earlier and reduce conflicts with other PRs.

ACKs for top commit:
  naumenkogs:
    ACK 7bc33a8

Tree-SHA512: 1c3c77be7db60222732221c087fd01cb802b84ac93333fccb38c8d16645f5f950c3362981021e7a3ae054f19fa7dd9e1cd15daaa101b61ca8853e42a1fd21474
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Aug 26, 2022
Move ChainstateManager options into m_options struct to simplify class
initialization, organize class members, and to name external option variables
differently than internal state variables.

This change was originally in bitcoin#25862, but it was suggested to split off in
bitcoin#25862 (comment) so it could
be merged earlier and reduce conflicts with other PRs.
Copy link
Member
@furszy furszy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Light code review ACK 2367163

Side note, have not being able to find a test that verifies whether the generated dbs are obfuscated or not. Might be good to add one if there isn't any.

Add DBParams and DBOptions structs to remove ArgsManager uses from dbwrapper.

To reduce size of this commit, this moves references to gArgs variable out of
dbwrapper.cpp to calling code in txdb.cpp. But these moves are temporary. The
gArgs references in txdb.cpp are moved out to calling code in init.cpp in later
commits.

This commit does not change behavior.
Add CoinsViewOptions struct to remove ArgsManager uses from txdb.

To reduce size of this commit, this moves references to gArgs variable out of
txdb.cpp to calling code in validation.cpp. But these moves are temporary. The
gArgs references in validation.cpp are moved out to calling code in init.cpp in
later commits.

This commit does not change behavior.
Use DBParams struct to remove ArgsManager uses from txdb.

To reduce size of this commit, this moves references to gArgs variable out of
txdb.cpp to calling code in chainstate.cpp. But these moves are temporary. The
gArgs references in chainstate.cpp are moved out to calling code in init.cpp in
later commits.

This commit does not change behavior.
Use ChainstateManagerOpts struct to remove ArgsManager uses from validation.cpp.

This commit does not change behavior.
Copy link
Contributor Author
@ryanofsky ryanofsky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review!

Updated cde3882 -> aadd7c5 (pr/dbargs.12 -> pr/dbargs.13, compare) adding back lost test setup noticed by furszy #25862 (review)

@TheCharlatan
Copy link
Contributor

Code review ACK aadd7c5

@DrahtBot DrahtBot requested a review from furszy February 14, 2023 08:08
Copy link
Member
@furszy furszy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

diff ACK aadd7c5

@ryanofsky
Copy link
Contributor Author

This has 2 code reviews. Not sure if it might be ready for merge, or if it needs another reviewer.

@achow101
Copy link
Member

ACK aadd7c5

@achow101 achow101 merged commit 9321df4 into bitcoin:master Feb 17, 2023
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Feb 25, 2023
fanquake added a commit to bitcoin-core/gui that referenced this pull request Mar 14, 2023
…ystem.h

aaced56 refactor: Move error() from util/system.h to logging.h (Ben Woosley)
e7333b4 refactor: Extract util/exception from util/system (Ben Woosley)

Pull request description:

  This pull request is part of the `libbitcoinkernel` project bitcoin/bitcoin#24303 https://github.com/bitcoin/bitcoin/projects/18 and more specifically its "Step 2: Decouple most non-consensus code from libbitcoinkernel". These commits were originally authored by empact and are taken from their parent PR #25152.

  #### Context

  There is an ongoing effort to decouple the `ArgsManager` used for command line parsing user-provided arguments from the libbitcoinkernel library (bitcoin/bitcoin#25290, bitcoin/bitcoin#25487, bitcoin/bitcoin#25527, bitcoin/bitcoin#25862, bitcoin/bitcoin#26177, and bitcoin/bitcoin#27125). The `ArgsManager` is defined in `system.h`.

  #### Changes

  Next to providing better code organization, this PR removes some reliance of the tree of libbitcoinkernel header includes on `system.h` (and thus the `ArgsManager` definition) by moving some logging functions out of the `system.*` files.

  Further commits splitting more functionality out of `system.h` are still in #25152 and will be submitted in separate PRs once this PR has been processed.

ACKs for top commit:
  MarcoFalke:
    re-ACK aaced56 🐍

Tree-SHA512: cb39f4cb7a77e7dc1887b1cbf340d53decab8880fc00878a2f12dc627fe67245b4aafd4cc31a9eab0fad1e5bb5d0eb4cdb8d501323ca200fa6ab7b201ae34aea
fanquake added a commit to bitcoin-core/gui that referenced this pull request Mar 16, 2023
…arams functionality to kernel

b3e78dc refactor: Don't use global chainparams in chainstatemanager method (TheCharlatan)
382b692 Split non/kernel chainparams (Carl Dong)
edabbc7 Add factory functions for Main/Test/Sig/Reg chainparams (Carl Dong)
d938098 Remove UpdateVersionBitsParameters (Carl Dong)
84b8578 Decouple RegTestChainParams from ArgsManager (Carl Dong)
76cd4e7 Decouple SigNetChainParams from ArgsManager (Carl Dong)

Pull request description:

  This pull request is part of the `libbitcoinkernel` project bitcoin/bitcoin#24303 https://github.com/bitcoin/bitcoin/projects/18 and more specifically its "Step 2: Decouple most non-consensus code from libbitcoinkernel". dongcarl is the original author of this patchset, these commits were taken from https://github.com/dongcarl/bitcoin/tree/2022-03-libbitcoinkernel-chainparams-args-only.

  #### Context

  The bitcoin kernel library currently relies on code containing user configurations through the `ArgsManager`. This is not optimal, since as a stand-alone library it should not rely on bitcoind's argument parsing logic. Instead, its interfaces should accept control and options structs that control the kernel library's desired configuration.

  Similar work towards decoupling the `ArgsManager` from the kernel has been done in
  bitcoin/bitcoin#25290, bitcoin/bitcoin#25487, bitcoin/bitcoin#25527 and bitcoin/bitcoin#25862.

  #### Changes

  By moving the `CChainParams` class definition into the kernel and giving it new factory functions `CChainParams::{RegTest,SigNet,Main,TestNet}`it can be constructed without an `ArgsManager` reference, unlike the current factory function `CreateChainParams`.

  The first few commits remove uses of `ArgsManager` within `CChainParams`. Then the `CChainParams` definition is moved to a new file in the `kernel/` subdirectory.

ACKs for top commit:
  MarcoFalke:
    re-ACK <
F438
tt>b3e78dc 🛁
  ryanofsky:
    Code review ACK b3e78dc. Only changes since last review were recent review suggestions.
  ajtowns:
    ACK b3e78dc

Tree-SHA512: 3835aca1d3e3c75cc3303dd584bab3a77e58f6c678724a5e359fe4b0e17e0763a00931ee6191f516b9fde50496f59cc691f0709c0254206db3863bbf7ab2cacd
fanquake added a commit to bitcoin-core/gui that referenced this pull request Apr 3, 2023
00e9b97 refactor: Move fs.* to util/fs.* (TheCharlatan)
106b46d Add missing fs.h includes (TheCharlatan)
b202b3d Add missing cstddef include in assumptions.h (TheCharlatan)
18fb363 refactor: Extract util/fs_helpers from util/system (Ben Woosley)

Pull request description:

  This pull request is part of the `libbitcoinkernel` project bitcoin/bitcoin#24303 https://github.com/bitcoin/bitcoin/projects/18 and more specifically its "Step 2: Decouple most non-consensus code from libbitcoinkernel". This commit was originally authored by empact and is taken from its parent PR #25152.

  #### Context

  There is an ongoing effort to decouple the `ArgsManager` used for command line parsing user-provided arguments from the libbitcoinkernel library (bitcoin/bitcoin#25290, bitcoin/bitcoin#25487, bitcoin/bitcoin#25527, bitcoin/bitcoin#25862, bitcoin/bitcoin#26177, and bitcoin/bitcoin#27125). The `ArgsManager` is defined in `system.h`. A similar pull request extracting functionality from `system.h` has been merged in bitcoin/bitcoin#27238.

  #### Changes

  Next to providing better code organization, this PR removes some reliance of the tree of libbitcoinkernel header includes on `system.h` (and thus the `ArgsManager` definition) by moving filesystem related functions out of the `system.*` files.

  There is already a pair of `fs.h` / `fs.cpp` in the top-level `src/` directory. They were not combined with the files introduced here, to keep the patch cleaner and more importantly because they are often included without the utility functions. The new files are therefore named `fs_helpers` and the existing `fs` files are moved into the util directory.

  Further commits splitting more functionality out of `system.h` are still in #25152 and will be submitted in separate PRs once this PR has been processed.

ACKs for top commit:
  hebasto:
    ACK 00e9b97

Tree-SHA512: 31422f148d14ba3c843b99b1550a6fd77c77f350905ca324f93d4f97b652246bc58fa9696c64d1201979cf88733e40be02d262739bb7d417cf22bf506fdb7666
fanquake added a commit to bitcoin-core/gui that referenced this pull request May 11, 2023
…rom blockstorage

5ff63a0 refactor, blockstorage: Replace stopafterblockimport arg (TheCharlatan)
18e5ba7 refactor, blockstorage: Replace blocksdir arg (TheCharlatan)
02a0899 refactor, BlockManager: Replace fastprune from arg with options (TheCharlatan)
a498d69 refactor/iwyu: Complete includes for blockmanager_args (TheCharlatan)
f0bb102 refactor: Move functions to BlockManager methods (TheCharlatan)
cfbb212 zmq: Pass lambda to zmq's ZMQPublishRawBlockNotifier (TheCharlatan)
8ed4ff8 refactor: Declare g_zmq_notification_interface as unique_ptr (TheCharlatan)

Pull request description:

  The libbitcoin_kernel library should not rely on the `ArgsManager`, but rather use option structs that can be passed to the various classes it uses. This PR removes reliance on the `ArgsManager` from the `blockstorage.*` files. Like similar prior work, it uses the options struct in the `BlockManager` that can be populated with `ArgsManager` values.

  Some related prior work: bitcoin/bitcoin#26889 bitcoin/bitcoin#25862 bitcoin/bitcoin#25527 bitcoin/bitcoin#25487

  Related PR removing blockstorage globals: bitcoin/bitcoin#25781

ACKs for top commit:
  ryanofsky:
    Code review ACK 5ff63a0. Since last ACK just added std::move and fixed commit title. Sorry for the noise!
  mzumsande:
    Code Review ACK 5ff63a0

Tree-SHA512: 4bde8fd140a40b97eca923e9016d85dcea6fad6fd199731f158376294af59c3e8b163a0725aa47b4be3519b61828044e0a042deea005e0c28de21d8b6c3e1ea7
@bitcoin bitcoin locked and limited conversation to collaborators Feb 17, 2024
@bitcoin bitcoin unlocked this conversation Sep 20, 2024
delta1 added a commit to delta1/elements that referenced this pull request Apr 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants
0