Skip to content

Slow response time (or canceled due to enabled timeout) for eth_getLogs for block range from 0x0 to latest (Gnosis Full node example) #8860

@Serhy

Description

@Serhy

Description
Many requests devs are using unfortunately doesn't care about block ranges querying from "0" to "latest".
Responses for such eth_getLogs requests with whole network block range are processing very slow and most likely will be canceled due do timeout (if you have default 60 sec timeout).

Also this has impact on requests queue which grows overtime which eventually starts erroring with

"data": "Nethermind.JsonRpc.Exceptions.ModuleRentalTimeoutException: Unable to rent an instance of IEthRpcModule. Too many concurrent requests.\n   at Nethermind.JsonRpc.Modules.BoundedModulePool`1.SlowPath() in /src/Nethermind/Nethermind.JsonRpc/Modules/BoundedModulePool.cs:line 75\n   at Nethermind.JsonRpc.Modules.RpcModuleProvider.<>c__DisplayClass17_0`1.<<GetPools>b__0>d.MoveNext()\n--- 

messages

Steps to Reproduce

  1. Sync Full node. Below is example for Gnosis Mainnet Full node stats
  "args": [
              "--config", "gnosis",
              "--datadir", "/data/ne-gno-mainnet",
              "--JsonRpc.Enabled", "true",
              "--JsonRpc.WebSocketsPort", "8545",
              "--JsonRpc.RequestQueueLimit","1000",
              "--JsonRpc.JwtSecretFile", "/secrets/jwtsecret",
              "--JsonRpc.EnabledModules", "net,eth,consensus,subscribe,web3,txpool,trace",
              "--JsonRpc.AdditionalRpcUrls", "http://0.0.0.0:8551|http;ws|net;eth;subscribe;engine;web3;client",
              "--JsonRpc.Port",  8545,
              "--JsonRpc.Host", "0.0.0.0",
              "--JsonRpc.EnginePort", 8551,
              "--JsonRpc.EngineHost", "0.0.0.0",
              "--Receipt.TxLookupLimit",  0,
              "--Merge.Enabled", "true",
              "--Init.WebSocketsEnabled", "true",
              "--Metrics.Enabled", "true",
              "--EthStats.Enabled", "true",
              "--EthStats.Secret", "${secret}",
              "--EthStats.Server", "wss://ethstats.gnosischain.com/api",
              "--JsonRpc.Timeout", 60000
            ],
  1. Send eth_getLogs from "0x0" to "latest".
curl --location 'https://localhost:8545' \
--header 'Content-Type: application/json' \
--data '{
  "jsonrpc": "2.0",
  "id": "12",
  "method": "eth_getLogs",
  "params": [{"address":"0xcB444e90D8198415266c6a2724b7900fb12FC56E","fromBlock":"0x0","toBlock":"latest","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000f55a8efa8db68c896241b252c032d028b605d53",null]}
  ]
}'

Actual behavior
Slow response >60 sec. (timeout for our set up)

"error": {
        "code": -32016,
        "message": "eth_getLogs request was canceled due to enabled timeout."
    }

Expected behavior
Less than 5 sec processing time for 0-to-latest block ranges with successful response.
Of course this value is hardly depends of network, settings, node and hardware. Just for comparison - for above case Erigon(v3) responding in <2 sec

Screenshots
If applicable, please include screenshots to help illustrate the problem.

Desktop (please complete the following information):
Please provide the following information regarding your setup:

OS: Ubuntu 22.04.4 LTS
Kernel: 5.15.0-107-generic
Model name:                         AMD EPYC 9354P 32-Core Processor
Mem:            62Gi       8.6Gi       2.5Gi        84Mi        51Gi        52Gi
nvme0n1                   3.5T disk
nvme1n1                   3.5T disk
c2:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. Integrated Matrox G200eW3 Graphics Controller (rev 04)

  • Version: nethermind/nethermind:1.31.10
  • Installation Method: Docker
  • Consensus Client: Lighthouse v7.0.1

Additional context
Below is CPU and disk for when I send for same node 3 requests at the same time:

Image
Image

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions