Skip to content

Config Refresh#4049

Open
MicahMaphet wants to merge 15 commits intobitpay:masterfrom
MicahMaphet:config-refresh
Open

Config Refresh#4049
MicahMaphet wants to merge 15 commits intobitpay:masterfrom
MicahMaphet:config-refresh

Conversation

@MicahMaphet
Copy link
Copy Markdown
Contributor

@MicahMaphet MicahMaphet commented Nov 10, 2025

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:

$ ./scripts/reloadConfig.sh
Reload configs for all workers: 264191 242416

List active workers:

$ ./scripts/reloadConfig.sh list
all
api

Reload configs for specified workers:

$ ./scripts/reloadConfig.sh all api
Sent reload signal(s) SIGUSR1 to 'all api'
pids: 264191 242416

Not all of the config options reload properly, e.g. numWorkers.
What is known to work:

  • changing peer connections
  • disabling and enabling peers
  • RPC connections (at least for the purposes of the /fee route)
  • API port

@MicahMaphet MicahMaphet marked this pull request as ready for review November 25, 2025 21:44
@MicahMaphet MicahMaphet marked this pull request as draft November 25, 2025 22:18
@MicahMaphet MicahMaphet marked this pull request as ready for review December 4, 2025 19:18
@MicahMaphet MicahMaphet marked this pull request as draft December 18, 2025 13:14
@kajoseph kajoseph added the BCN This pull request modifies the bitcore-node package label Dec 30, 2025
@MicahMaphet MicahMaphet changed the title [BCN] Config Refresh Config Refresh Jan 5, 2026
@MicahMaphet MicahMaphet marked this pull request as ready for review April 17, 2026 18:41
@kajoseph kajoseph requested a review from Copilot April 17, 2026 20:22
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

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.ts now exports a loader; src/services/config.ts owns 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.

Comment thread packages/bitcore-node/src/services/api.ts Outdated
Comment thread packages/bitcore-node/src/services/worker.ts Outdated
Comment thread packages/bitcore-node/src/workers/p2p.ts Outdated
Comment thread packages/bitcore-node/src/workers/api.ts Outdated
Comment on lines 42 to 46
});

// Mock config.numWorkers
sandbox.stub(config, 'numWorkers').value(3);


Config.updateConfig({ numWorkers: 3 });

// Clear the Worker service's internal state
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

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

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.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@kajoseph should we worry about the tests changing the config for a server that is already running?

Comment thread packages/bitcore-node/Dockerfile Outdated
Comment thread packages/bitcore-node/src/services/p2p.ts Outdated
Comment thread packages/bitcore-node/src/routes/api/wallet.ts Outdated
Comment thread packages/bitcore-node/scripts/reloadConfig.sh
Comment thread packages/bitcore-node/src/modules/bitcoin/p2p.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BCN This pull request modifies the bitcore-node package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants