Skip to content

Commit ba6c8d0

Browse files
committed
v0.1.41 Hopefully made batch request retry middleware more robust
1 parent 0172d27 commit ba6c8d0

File tree

2 files changed

+25
-24
lines changed

2 files changed

+25
-24
lines changed

IceCreamSwapWeb3/BatchRetryMiddleware.py

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,25 @@ def middleware(requests_info) -> list:
2121
response += middleware(requests_info[start:start + self._w3.rpc_batch_max_size])
2222
return response
2323

24+
if self._w3.rpc_batch_max_size == 0 or len(requests_info) == 1:
25+
# if RPC does not support batch requests or single request in batch, make individual requests
26+
return [
27+
exponential_retry(method)(make_batch_request.__self__.make_request)(
28+
method,
29+
params,
30+
no_retry=not self._w3.should_retry
31+
)
32+
for method, params in requests_info
33+
]
34+
2435
try:
25-
if self._w3.rpc_batch_max_size == 0 or len(requests_info) == 1:
26-
# if RPC does not support batch requests or single request in batch, make individual requests
27-
response = [
28-
exponential_retry(method)(make_batch_request.__self__.make_request)(
29-
method,
30-
params,
31-
no_retry=not self._w3.should_retry
32-
)
33-
for method, params in requests_info
34-
]
35-
else:
36-
response = make_batch_request(requests_info)
36+
response = make_batch_request(requests_info)
3737
except Exception as e:
38-
assert len(requests_info) > 1
3938
print(f"batch RPC call with {len(requests_info)} requests got exception {repr(e)}, splitting and retrying")
4039
else:
41-
if len(response) == len(requests_info):
40+
if len(response) != len(requests_info):
41+
print(f"made batch request with size {len(requests_info)} but only received {len(response)} results. splitting and retrying.{f' Sample response: {response[0]}' if len(response) != 0 else ''}")
42+
else:
4243
# find individual failed requests
4344
requests_retry = []
4445
request_indexes: list[tuple[int, int]] = []
@@ -47,19 +48,19 @@ def middleware(requests_info) -> list:
4748
request_indexes.append((i, len(requests_retry)))
4849
requests_retry.append(request_single)
4950

50-
if len(requests_retry) != 0:
51-
# retry failed requests
52-
print(f"{len(requests_retry)}/{len(requests_info)} requests in batch failed, retrying. Example response: {response[request_indexes[0][0]]}")
53-
if len(requests_retry) == len(requests_info):
54-
# all failed, let's wait a moment before retrying
55-
sleep(1)
51+
if len(requests_retry) == 0:
52+
return response
53+
54+
print(f"{len(requests_retry)}/{len(requests_info)} requests in batch failed, retrying. Example response: {response[request_indexes[0][0]]}")
55+
56+
if len(requests_retry) != len(requests_info): # if some requests succeeded, retry failed requests
5657
response_new = middleware(requests_retry)
5758
for old_idx, new_idx in request_indexes:
5859
response[old_idx] = response_new[new_idx]
60+
return response
5961

60-
return response
61-
else:
62-
print(f"made batch request with size {len(requests_info)} but only received {len(response)} results. splitting and retrying.{f' Sample response: {response[0]}'if len(response) != 0 else ''}")
62+
assert len(requests_info) > 1
6363
middle = len(requests_info) // 2
64+
sleep(0.1)
6465
return middleware(requests_info[:middle]) + middleware(requests_info[middle:])
6566
return middleware

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
VERSION = '0.1.40'
3+
VERSION = '0.1.41'
44
DESCRIPTION = 'IceCreamSwap Web3.py wrapper'
55
LONG_DESCRIPTION = 'IceCreamSwap Web3.py wrapper with automatic retries, multicall and other advanced functionality'
66

0 commit comments

Comments
 (0)