-
Notifications
You must be signed in to change notification settings - Fork 50
Process Separation
The process separation project builds new bitcoin-node, bitcoin-wallet,
and bitcoin-gui executables that isolate node, wallet, and gui functionality in different
processes and communicate with each other across sockets.
A combined branch with all multiprocess changes can be found at
ryanofsky@ipc-export
with documentation in
doc/multiprocess.md.
For review purposes, the branch has been broken up into multiple PRs, major ones are listed and grouped below.
Refactoring PRs replace wallet code accessing node state directly, and GUI code accessing wallet and node state directly, with new code accessing state indirectly through explicitly-defined interface classes in src/interfaces/ that don't assume interface callers and callees have access to the same memory space.
- #10244 Refactor: separate gui from wallet and node
- #14437 Refactor: Start to separate wallet from node
- #15288 Remove wallet -> node global function calls
- #17999 refactor: Add ChainClient setMockTime, getWallets methods
- #18278 interfaces: Describe and follow some code conventions
The build PR adds new bitcoin-gui and bitcoin-node makefile targets, a new travis variant, and new configure and depends changes to build against the libmultiprocess library. These changes only affect build scripts, not C++ code.
Performance improvements or fixes needed for multiprocess support.
Minimal change changing bitcoin-gui to spawn a bitcoin-node process, and
bitcoin-node to spawn a bitcoin-wallet process and for gui, node, and wallet
functionality to run in the different processes and communicate though pipes.
Changes adding -ipcconnect and -ipcbind options and allowing bitcoin-node
to open a listening socket that allows incoming bitcoin-gui and bitcoin-wallet
connections.
-
c83e46ccb4fAdd bitcoin-wallet -ipcconnect and bitcoin-node -ipcbind options -
1a1c4e0c528Add bitcoin-gui -ipcconnect option
Steps 1, 2, and 3 above can proceed simultaneously, but steps 4 and 5 depend on all earlier PRs to be merged before they are merged.