Config Refresh#4049
Conversation
…st all workers, --help, and more friendly to other shells
3301ede to
44e8381
Compare
There was a problem hiding this comment.
Pull request overview
Adds runtime configuration reloading to bitcore-node workers (via SIGUSR1) and updates code to read configuration through the new ConfigService rather than a static config object.
Changes:
- Refactors config loading to be reloadable (
src/config.tsnow exports a loader;src/services/config.tsowns the live config and reload logic). - Adds SIGUSR1-triggered reload behaviors (API port reload; P2P manager/Bitcoin peer refresh) and a helper script that signals running worker PIDs.
- Updates tests and various modules/routes/adapters to use
Config.get()/Config.updateConfig().
Reviewed changes
Copilot reviewed 32 out of 40 changed files in this pull request and generated 17 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/bitcore-node/test/verification/rpc-verify.ts | Switches RPC creds lookup to Config.get() |
| packages/bitcore-node/test/unit/services/worker.test.ts | Uses Config.updateConfig to control numWorkers during tests |
| packages/bitcore-node/test/unit/services/p2p.test.ts | Formatting-only changes |
| packages/bitcore-node/test/unit/models/transaction.test.ts | Formatting-only changes |
| packages/bitcore-node/test/unit/adapters/factory.test.ts | Uses Config.get() for external provider config in tests |
| packages/bitcore-node/test/unit/adapters/alchemy.test.ts | Uses Config.get() for external provider config in tests |
| packages/bitcore-node/test/integration/websocket.test.ts | Uses Config.get() for chain/network RPC creds |
| packages/bitcore-node/test/integration/wallet-benchmark.test.ts | Uses Config.get() for chain/network RPC creds; formatting tweaks |
| packages/bitcore-node/test/integration/verification.test.ts | Uses Config.get() for chain/network RPC creds |
| packages/bitcore-node/test/integration/routes/block.test.ts | Formatting-only changes |
| packages/bitcore-node/test/integration/models/wallet.test.ts | Uses Config.get() for chain/network RPC creds |
| packages/bitcore-node/test/integration/models/transaction.test.ts | Formatting-only changes |
| packages/bitcore-node/test/integration/models/coin.test.ts | Formatting-only changes |
| packages/bitcore-node/test/integration/models/block.test.ts | Formatting-only changes |
| packages/bitcore-node/test/integration/matic/p2p.test.ts | Uses Config.get() for chain/network config |
| packages/bitcore-node/test/integration/ethereum/p2p.test.ts | Uses Config.get() for chain/network config |
| packages/bitcore-node/test/helpers/integration.ts | Uses Config.get() for dbHost in integration setup |
| packages/bitcore-node/test/benchmark/benchmark.ts | Uses Config.get() for dbHost in benchmark setup |
| packages/bitcore-node/src/workers/p2p.ts | Writes/cleans up a pid file for reload signaling |
| packages/bitcore-node/src/workers/api.ts | Writes/cleans up a pid file for reload signaling (primary process) |
| packages/bitcore-node/src/workers/all.ts | Writes/cleans up a pid file for reload signaling (primary process) |
| packages/bitcore-node/src/services/worker.ts | Uses Config.get().numWorkers to size the cluster (but import path currently broken) |
| packages/bitcore-node/src/services/p2p.ts | Adds SIGUSR1 handling to stop/start P2P workers based on updated config |
| packages/bitcore-node/src/services/config.ts | Introduces reloadable ConfigService and SIGUSR1/message-based reload propagation |
| packages/bitcore-node/src/services/api.ts | Adds API port reload behavior on reload signals/messages |
| packages/bitcore-node/src/routes/status.ts | Switches to Config.get().chains (but import path currently broken) |
| packages/bitcore-node/src/routes/index.ts | Switches networks discovery to Config.get().chains |
| packages/bitcore-node/src/routes/api/wallet.ts | Uses Config.get() for socket BWS key lookup (but import path currently broken) |
| packages/bitcore-node/src/routes/api/fee.ts | Uses Config.get() for default fee mode (but import path currently broken) |
| packages/bitcore-node/src/providers/chain-state/svm/api/csp.ts | Formatting-only changes |
| packages/bitcore-node/src/providers/chain-state/external/adapters/alchemy.ts | Reads Alchemy API key from Config.get() |
| packages/bitcore-node/src/providers/chain-state/evm/api/routes.ts | Reads Moralis webhook config from Config.get() |
| packages/bitcore-node/src/providers/chain-state/evm/api/csp.ts | Formatting-only changes |
| packages/bitcore-node/src/modules/ripple/api/csp.ts | Switches Ripple config access to Config.get().chains[...] |
| packages/bitcore-node/src/modules/moralis/api/csp.ts | Switches Moralis config access to Config.get() (but import path currently broken) |
| packages/bitcore-node/src/modules/bitcoin/p2p.ts | Adds SIGUSR1-driven peer reload logic based on updated config |
| packages/bitcore-node/src/config.ts | Changes default export from config object to loadConfig() function |
| packages/bitcore-node/scripts/reloadConfig.sh | New script to signal workers listed in pid files |
| packages/bitcore-node/Dockerfile | Alters container startup command (currently invalid) |
| conf | New file containing ANSI-colored diff output (appears accidental) |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| }); | ||
|
|
||
| // Mock config.numWorkers | ||
| sandbox.stub(config, 'numWorkers').value(3); | ||
|
|
||
|
|
||
| Config.updateConfig({ numWorkers: 3 }); | ||
|
|
||
| // Clear the Worker service's internal state |
There was a problem hiding this comment.
This test updates the global Config singleton (Config.updateConfig({ numWorkers: 3 })) but never restores the previous value, which can leak state into other unit tests. Save the prior config/numWorkers in beforeEach and restore it in afterEach.
There was a problem hiding this comment.
@kajoseph should we worry about the tests changing the config for a server that is already running?
Reload config files bitcore-node
bitcore-node workers reload their configs on SIGUSR1
Use the scripts/reloadConfig.sh to send SIGUSR1 to pids contained in new pids directory
Reload all workers:
List active workers:
Reload configs for specified workers:
Not all of the config options reload properly, e.g. numWorkers.
What is known to work: