2022-05-01 09:31:18 +02:00
|
|
|
# standard imports
|
|
|
|
import logging
|
|
|
|
|
2022-03-14 22:40:20 +01:00
|
|
|
# external imports
|
|
|
|
from chainqueue import Store as QueueStore
|
|
|
|
|
2022-05-01 08:58:52 +02:00
|
|
|
# local imports
|
|
|
|
from chaind.error import BackendIntegrityError
|
|
|
|
|
2022-05-01 09:31:18 +02:00
|
|
|
logg = logging.getLogger(__name__)
|
|
|
|
|
2022-03-14 22:40:20 +01:00
|
|
|
|
|
|
|
class ChaindAdapter:
|
|
|
|
|
2022-05-01 08:58:52 +02:00
|
|
|
race_delay = 0.1
|
|
|
|
|
2022-03-15 09:28:10 +01:00
|
|
|
def __init__(self, chain_spec, state_store, index_store, counter_store, cache_adapter, dispatcher, cache=None, pending_retry_threshold=0, error_retry_threshold=0):
|
|
|
|
self.cache_adapter = cache_adapter
|
2022-03-14 22:40:20 +01:00
|
|
|
self.dispatcher = dispatcher
|
2022-05-01 08:58:52 +02:00
|
|
|
err = None
|
|
|
|
for i in range(3):
|
|
|
|
try:
|
|
|
|
self.store = QueueStore(chain_spec, state_store, index_store, counter_store, cache=cache)
|
|
|
|
err = None
|
|
|
|
break
|
|
|
|
except FileNotFoundError as e:
|
|
|
|
logg.debug('queuestore instantiation failed, possible race condition (will try again): {}'.format(tx_hash, e))
|
|
|
|
err = e
|
|
|
|
time.sleep(self.race_delay)
|
|
|
|
continue
|
|
|
|
|
|
|
|
if err != None:
|
|
|
|
raise BackendIntegrityError(err)
|