Skip to content

Commit c619451

Browse files
authored
Merge pull request #13 from stakewise/retry-requests
Retry requests for fetching validators data
2 parents ee846f0 + 1994778 commit c619451

File tree

1 file changed

+40
-5
lines changed

1 file changed

+40
-5
lines changed

src/reward_token.py

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
from typing import List, Set
44

55
from eth_typing.bls import BLSPubkey
6+
from grpc._channel import _InactiveRpcError # type: ignore
67
from loguru import logger
8+
from requests import HTTPError
79
from web3 import Web3
810
from web3.types import Wei
911

@@ -140,7 +142,18 @@ def process(self) -> None:
140142
return
141143

142144
# fetch new pool validators
143-
public_keys: Set[BLSPubkey] = get_pool_validator_public_keys(self.pool)
145+
for _ in range(5):
146+
try:
147+
public_keys: Set[BLSPubkey] = get_pool_validator_public_keys(self.pool)
148+
break
149+
except HTTPError:
150+
logger.warning(
151+
"Failed to fetch validators' public keys, trying again..."
152+
)
153+
time.sleep(5)
154+
else:
155+
public_keys = get_pool_validator_public_keys(self.pool)
156+
144157
inactive_public_keys: Set[BLSPubkey] = set()
145158

146159
# calculate epoch to fetch balance at
@@ -150,9 +163,20 @@ def process(self) -> None:
150163
)
151164

152165
# filter out inactive validators
153-
response = self.validator_stub.MultipleValidatorStatus(
154-
MultipleValidatorStatusRequest(public_keys=public_keys)
155-
)
166+
for _ in range(5):
167+
try:
168+
response = self.validator_stub.MultipleValidatorStatus(
169+
MultipleValidatorStatusRequest(public_keys=public_keys)
170+
)
171+
break
172+
except _InactiveRpcError:
173+
logger.warning("Failed to fetch validators' statuses, trying again...")
174+
time.sleep(5)
175+
else:
176+
response = self.validator_stub.MultipleValidatorStatus(
177+
MultipleValidatorStatusRequest(public_keys=public_keys)
178+
)
179+
156180
for i, public_key in enumerate(response.public_keys):
157181
status_response = response.statuses[i]
158182
if (
@@ -183,7 +207,18 @@ def process(self) -> None:
183207
epoch=epoch, public_keys=active_public_keys
184208
)
185209
while True:
186-
response = self.beacon_chain_stub.ListValidatorBalances(request)
210+
for _ in range(5):
211+
try:
212+
response = self.beacon_chain_stub.ListValidatorBalances(request)
213+
break
214+
except _InactiveRpcError:
215+
logger.warning(
216+
"Failed to fetch validators' balances, trying again..."
217+
)
218+
time.sleep(5)
219+
else:
220+
response = self.beacon_chain_stub.ListValidatorBalances(request)
221+
187222
for balance_response in response.balances:
188223
total_balances += int(Web3.toWei(balance_response.balance, "gwei"))
189224

0 commit comments

Comments
 (0)