b9e76f1bf0 rpc: Add test for -rpcwaittimeout (Christian Decker)
f76cb10d7d rpc: Prefix rpcwaittimeout error with details on its nature (Christian Decker)
c490e17ef6 doc: Add release notes for the `-rpcwaittimeout` cli parameter (Christian Decker)
a7fcc8eb59 rpc: Add a `-rpcwaittimeout` parameter to limit time spent waiting (Christian Decker)
Pull request description:
Adds a new numeric `-rpcwaittimeout` that can be used to limit the
time we spend waiting on the RPC server to appear. This is used by
downstream projects to provide a bit of slack when `bitcoind`s RPC
interface is not available right away.
This makes the `-rpcwait` argument more useful, since we can now limit
how long we'll ultimately wait, before potentially giving up and reporting
an error to the caller. It was discussed in the context of the BTCPayServer
wanting to have c-lightning wait for the RPC interface to become available
but still have the option of giving up eventually ([4355]).
I checked with laanwj whether this is already possible ([comment]), and
whether this would be a welcome change. Initially I intended to repurpose
the (optional) argument to `-rpcwait`, however I decided against it since it
would potentially break existing configurations, using things like `rpcwait=1`,
or `rpcwait=true` (the former would have an unintended short timeout, when
old behavior was to wait indefinitely).
~Due to its simplicity I didn't implement a test for it yet, but if that's desired I
can provide one.~ Test was added during reviews.
[4355]: https://github.com/ElementsProject/lightning/issues/4355
[comment]: https://github.com/ElementsProject/lightning/issues/4355#issuecomment-768288261
ACKs for top commit:
laanwj:
Code review ACK b9e76f1bf0
promag:
ACK b9e76f1bf0.
Tree-SHA512: 3cd6728038ec7ca7c35c2e7ccb213bfbe963f99a49bb48bbc1e511c4dd23d9957c04f9af1f8ec57120e47b26eaf580b46817b099d5fc5083c98da7aa92db8638
argsman.AddArg("-rpcport=<port>",strprintf("Connect to JSON-RPC on <port> (default: %u, testnet: %u, signet: %u, regtest: %u)",defaultBaseParams->RPCPort(),testnetBaseParams->RPCPort(),signetBaseParams->RPCPort(),regtestBaseParams->RPCPort()),ArgsManager::ALLOW_ANY|ArgsManager::NETWORK_ONLY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcport=<port>",strprintf("Connect to JSON-RPC on <port> (default: %u, testnet: %u, signet: %u, regtest: %u)",defaultBaseParams->RPCPort(),testnetBaseParams->RPCPort(),signetBaseParams->RPCPort(),regtestBaseParams->RPCPort()),ArgsManager::ALLOW_ANY|ArgsManager::NETWORK_ONLY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcuser=<user>","Username for JSON-RPC connections",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcuser=<user>","Username for JSON-RPC connections",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcwait","Wait for RPC server to start",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcwait","Wait for RPC server to start",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcwaittimeout=<n>",strprintf("Timeout in seconds to wait for the RPC server to start, or 0 for no timeout. (default: %d)",DEFAULT_WAIT_CLIENT_TIMEOUT),ArgsManager::ALLOW_INT,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcwallet=<walletname>","Send RPC for non-default wallet on RPC server (needs to exactly match corresponding -wallet option passed to bitcoind). This changes the RPC endpoint used, e.g. http://127.0.0.1:8332/wallet/<walletname>",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-rpcwallet=<walletname>","Send RPC for non-default wallet on RPC server (needs to exactly match corresponding -wallet option passed to bitcoind). This changes the RPC endpoint used, e.g. http://127.0.0.1:8332/wallet/<walletname>",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-stdin","Read extra arguments from standard input, one per line until EOF/Ctrl-D (recommended for sensitive information such as passphrases). When combined with -stdinrpcpass, the first line from standard input is used for the RPC password.",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-stdin","Read extra arguments from standard input, one per line until EOF/Ctrl-D (recommended for sensitive information such as passphrases). When combined with -stdinrpcpass, the first line from standard input is used for the RPC password.",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-stdinrpcpass","Read RPC password from standard input as a single line. When combined with -stdin, the first line from standard input is used for the RPC password. When combined with -stdinwalletpassphrase, -stdinrpcpass consumes the first line, and -stdinwalletpassphrase consumes the second.",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);
argsman.AddArg("-stdinrpcpass","Read RPC password from standard input as a single line. When combined with -stdin, the first line from standard input is used for the RPC password. When combined with -stdinwalletpassphrase, -stdinrpcpass consumes the first line, and -stdinwalletpassphrase consumes the second.",ArgsManager::ALLOW_ANY,OptionsCategory::OPTIONS);