chainqueue

Blockchain transaction queue control
Log | Files | Refs | LICENSE

commit 04d9901f0dabe2f0fcb7bfeee74dda63e6e1b531
parent b8c2b1b86a401e6ae3da0e6a8bbf4e463d91f844
Author: lash <dev@holbrook.no>
Date:   Sat, 30 Apr 2022 18:31:02 +0000

Allow backend objects to move between sync and get

Diffstat:
Mchainqueue/store/base.py | 30+++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/chainqueue/store/base.py b/chainqueue/store/base.py @@ -8,6 +8,7 @@ from chainqueue.cache import CacheTx from chainqueue.entry import QueueEntry from chainqueue.error import ( NotLocalTxError, + BackendIntegrityError, ) from chainqueue.enum import ( StatusBits, @@ -50,7 +51,17 @@ class Store: 'modified', ]: setattr(self, v, getattr(self.state_store, v)) - self.state_store.sync() + + sync_err = None + for i in range(2): + try: + self.state_store.sync() + except Exception as e: + sync_err = e + continue + + if sync_err != None: + raise BackendIntegrityError(sync_err) def put(self, v, cache_adapter=CacheTx): @@ -68,12 +79,17 @@ class Store: def get(self, k): - try: + v = None + for i in range(2): s = self.index_store.get(k) - except FileNotFoundError: + try: + self.state_store.sync() + v = self.state_store.get(s) + except FileNotFoundError: + continue + break + if v == None: raise NotLocalTxError(k) - self.state_store.sync() - v = self.state_store.get(s) return (s, v,) @@ -184,3 +200,7 @@ class Store: entry = QueueEntry(self, k) entry.load() return entry.test(self.RESERVED) + + + def sync(self): + self.state_store.sync()