Skip to content

Commit 8bc2b5a

Browse files
committed
Retry JSON-RPC requests on "invalid block range params" error
1 parent c75737a commit 8bc2b5a

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ Releases prior to 7.0 has been removed from this file to declutter search result
88

99
## [Unreleased]
1010

11+
### Fixed
12+
13+
- evm.node: Retry JSON-RPC requests on "invalid block range params" error.
14+
1115
## [8.5.1] - 2025-11-03
1216

1317
### Fixed

src/dipdup/datasources/evm_node.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,33 @@ async def _emitter_loop(self) -> None:
161161

162162
del self._level_data[head.hash]
163163

164+
async def _jsonrpc_request(
165+
self,
166+
method: str,
167+
params: Any,
168+
raw: bool = False,
169+
ws: bool = False,
170+
) -> Any:
171+
attempt = 1
172+
retry_sleep = self._http_config.retry_sleep
173+
retry_count = self._http_config.retry_count
174+
last_attempt = retry_count + 1
175+
176+
while True:
177+
try:
178+
return await super()._jsonrpc_request(method, params, raw=raw, ws=ws)
179+
except DatasourceError as e:
180+
# NOTE: Special case: node is out of sync, but we don't track
181+
# `syncing` events, so just retry as a safe HTTP exception.
182+
if 'invalid block range params' not in str(e) or attempt == last_attempt:
183+
raise
184+
185+
self._logger.warning('JSON-RPC request `%s` failed, retrying: %s', method, e)
186+
to_sleep = float(f'{retry_sleep:.1f}')
187+
self._logger.info('Waiting %s seconds before retry', to_sleep)
188+
await asyncio.sleep(to_sleep)
189+
attempt += 1
190+
164191
@property
165192
def ws_available(self) -> bool:
166193
return self._config.ws_url is not None

0 commit comments

Comments
 (0)