From 0090e9d8eab3f37779cf97e0191560d4d101e61c Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 20 Dec 2024 18:47:19 -0800 Subject: [PATCH] handle SubstrateRequestException error --- bittensor/core/subtensor_with_retry.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bittensor/core/subtensor_with_retry.py b/bittensor/core/subtensor_with_retry.py index 3a1edf53a8..2444277bb9 100644 --- a/bittensor/core/subtensor_with_retry.py +++ b/bittensor/core/subtensor_with_retry.py @@ -23,9 +23,10 @@ import numpy as np from numpy.typing import NDArray +from substrateinterface.exceptions import SubstrateRequestException from bittensor.core.metagraph import Metagraph -from bittensor.core.settings import version_as_int +from bittensor.core.settings import version_as_int, ARCHIVE_ENTRYPOINT from bittensor.core.subtensor import Subtensor from bittensor.utils.btlogging import logging @@ -78,9 +79,15 @@ def wrapper(*args, **kwargs): not self._subtensor or self._subtensor.chain_endpoint != endpoint ): - self._subtensor = self._get_subtensor(endpoint=endpoint) + self._get_subtensor(endpoint=endpoint) result = method(*args, **kwargs) return result + + except SubstrateRequestException as error: + if "UnknownBlock: State already discarded for" in str(error): + self._get_subtensor(endpoint=ARCHIVE_ENTRYPOINT) + return method(*args, **kwargs) + except Exception as error: logging.error( f"Attempt [blue]{retries}[/blue] for method [blue]{method.__name__}[/blue] failed. Error: {error}" @@ -168,7 +175,6 @@ def _get_subtensor(self, endpoint: Optional[str] = None): logging.debug( f"[magenta]Subtensor initialized with endpoint:[/magenta] [blue]{endpoint}[/blue]." ) - return self._subtensor def get_retry_seconds(self, netuid: Optional[int] = None) -> int: """Returns the number of seconds to wait before retrying a request based on `retry_second` or `_retry_epoch`.