electrs: Bug: 0.9.0 giving up on p2p connections to bitcoind much too quickly

Describe the bug A clear and concise description of what the bug is.

Electrs version 0.9.0

To Reproduce Just start, watch log (see below), see it failing to connect after just ~30s

Expected behavior Electrs to wait for bitcoind to become available

Configuration

    environment:
      - ELECTRS_NETWORK=testnet
      - ELECTRS_VERBOSE=3
      - ELECTRS_ELECTRUM_RPC_ADDR=0.0.0.0:${ELECTRS_TCP_PORT}
      - ELECTRS_DAEMON_RPC_ADDR=bitcoind:${BITCOIND_RPC_PORT}
      - ELECTRS_COOKIE_FILE=secret
      - ELECTRS_JSONRPC_IMPORT=true
      - ELECTRS_WAIT_DURATION_SECS=10
      - ELECTRS_BULK_INDEX_THREADS=2
      - ELECTRS_TXID_LIMIT=200

System running electrs Running within Docker + Compose on Ubuntu Linux 20.04 LTS.

Additional context

electrs_1           | Config { network: Testnet, db_path: "./db/testnet", daemon_dir: "/root/.bitcoin/testnet3", daemon_auth: CookieFile("/run/secrets/bitcoind_rpc_cookie"), daemon_rpc_addr: V4(172.27.0.3:18332), daemon_p2p_addr: V4(127.0.0.1:18333), electrum_rpc_addr: V4(0.0.0.0:51001), monitoring_addr: V4(127.0.0.1:14224), wait_duration: 10s, jsonrpc_timeout: 15s, index_batch_size: 10, index_lookup_limit: Some(200), auto_reindex: true, ignore_mempool: false, sync_once: false, server_banner: "Welcome to electrs 0.9.0 (Electrum Rust Server)!", args: [] }
electrs_1           | [2021-10-05T07:54:13.182Z INFO  electrs::metrics::metrics_impl] serving Prometheus metrics on 127.0.0.1:14224
electrs_1           | [2021-10-05T07:54:13.183Z DEBUG tiny_http] Server listening on 127.0.0.1:14224
electrs_1           | [2021-10-05T07:54:13.183Z DEBUG tiny_http] Running accept thread
electrs_1           | [2021-10-05T07:54:13.449Z INFO  electrs::db] "./db/testnet": 0 SST files, 0 GB, 0 Grows
electrs_1           | [2021-10-05T07:54:13.450Z DEBUG electrs::db] DB None
electrs_1           | [2021-10-05T07:54:13.458Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:13.459Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:13.459Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:14.460Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:14.461Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:14.461Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:15.461Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:15.462Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:15.463Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:16.463Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:16.464Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:16.464Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:17.464Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:17.465Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:17.466Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:18.466Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:18.467Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:18.467Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:19.467Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:19.479Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:19.479Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:20.479Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:20.480Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:20.480Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:21.480Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:21.483Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:21.483Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:22.483Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:22.484Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:22.484Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:23.484Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:23.485Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:23.485Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:24.485Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:24.487Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:24.487Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:25.487Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:25.488Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:25.488Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:26.488Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:26.489Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:26.489Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:27.489Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:27.490Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:27.490Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:28.491Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:28.493Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:28.493Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:29.493Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:29.494Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:29.494Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:30.494Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:30.496Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:30.496Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:31.496Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:31.497Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:31.497Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:32.497Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:32.499Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:32.499Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:33.499Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:33.500Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:33.500Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:34.500Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:34.501Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:34.501Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:35.502Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:35.503Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:35.503Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:36.503Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:36.505Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Loading block index...", data: None }
electrs_1           | [2021-10-05T07:54:36.505Z INFO  electrs::daemon] waiting for RPC warmup: Loading block index...
electrs_1           | [2021-10-05T07:54:37.505Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:37.508Z DEBUG bitcoincore_rpc::client] JSON-RPC error for getblockchaininfo: RpcError { code: -28, message: "Verifying blocks...", data: None }
electrs_1           | [2021-10-05T07:54:37.509Z INFO  electrs::daemon] waiting for RPC warmup: Verifying blocks...
electrs_1           | [2021-10-05T07:54:38.510Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:38.512Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getnetworkinfo []
electrs_1           | [2021-10-05T07:54:38.513Z DEBUG bitcoincore_rpc::client] JSON-RPC request: getblockchaininfo []
electrs_1           | [2021-10-05T07:54:38.515Z INFO  electrs::db] closing DB at ./db/testnet
electrs_1           | Error: testnet p2p failed to connect: V4(127.0.0.1:18333)
electrs_1           | 
electrs_1           | Caused by:
electrs_1           |     Connection refused (os error 111)

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 26 (25 by maintainers)

Most upvoted comments

Sounds good, perhaps with a note about checking config. Will do after #571

“Electrs now requires a P2P connection to bitcoind. If it can’t connect, electrs will fail.”

I just re-read the upgrading checklist and I see why I missed this. It doesn’t really say it’s now required – it just suggests to adapt old p2p conguration (which I didn’t have – I used JSON-RPC for everything). Anyway, I just added it and it is now re-indexing.

For P2P connections to bitcoind, it would be important that there is no timeout at all. It can take hours, or even days, to get a free P2P slot to a given bitcoind node. Or, your connection could be dropped by bitcoind for whatever reason, then you’ll need to retry to connect again. So I think this issue is still valid.

@romanz if you happen to use systemd, you may also want to read this one: https://github.com/bitcoin/bitcoin/pull/15367#issuecomment-762681497