-
Notifications
You must be signed in to change notification settings - Fork 952
Open
Labels
BOUNTY! 🫰A bounty is available for this PRA bounty is available for this PRcleanupgood first issuegood for onboardinggood for onboarding
Description
We currently use a rather lengthy loop to wait for bitcoind
to warm up and be ready to serve RPC calls:
Lines 710 to 749 in 44d408c
for (;;) { | |
child = pipecmdarr(NULL, &from, &from, cast_const2(char **,cmd)); | |
if (child < 0) { | |
if (errno == ENOENT) | |
bitcoind_failure(p, "bitcoin-cli not found. Is bitcoin-cli " | |
"(part of Bitcoin Core) available in your PATH?"); | |
plugin_err(p, "%s exec failed: %s", cmd[0], strerror(errno)); | |
} | |
char *output = grab_fd(cmd, from); | |
while ((ret = waitpid(child, &status, 0)) < 0 && errno == EINTR); | |
if (ret != child) | |
bitcoind_failure(p, tal_fmt(bitcoind, "Waiting for %s: %s", | |
cmd[0], strerror(errno))); | |
if (!WIFEXITED(status)) | |
bitcoind_failure(p, tal_fmt(bitcoind, "Death of %s: signal %i", | |
cmd[0], WTERMSIG(status))); | |
if (WEXITSTATUS(status) == 0) | |
break; | |
/* bitcoin/src/rpc/protocol.h: | |
* RPC_IN_WARMUP = -28, //!< Client still warming up | |
*/ | |
if (WEXITSTATUS(status) != 28) { | |
if (WEXITSTATUS(status) == 1) | |
bitcoind_failure(p, "Could not connect to bitcoind using" | |
" bitcoin-cli. Is bitcoind running?"); | |
bitcoind_failure(p, tal_fmt(bitcoind, "%s exited with code %i: %s", | |
cmd[0], WEXITSTATUS(status), output)); | |
} | |
if (!printed) { | |
plugin_log(p, LOG_UNUSUAL, | |
"Waiting for bitcoind to warm up..."); | |
printed = true; | |
} | |
sleep(1); | |
} |
This could be simplified if we just call bitcoin-cli
with -rpcwait
which implements the wait logic internally and allows us to skip checking the returned error (if we get an error it's not the warmup error so we can pass any error up regardless). The downside is that it doesn't allow us to print the warmup ourselves, but we could easily replace that with a single one-shot timer printing the message.
Metadata
Metadata
Assignees
Labels
BOUNTY! 🫰A bounty is available for this PRA bounty is available for this PRcleanupgood first issuegood for onboardinggood for onboarding