From 04d9901f0dabe2f0fcb7bfeee74dda63e6e1b531 Mon Sep 17 00:00:00 2001 From: lash Date: Sat, 30 Apr 2022 18:31:02 +0000 Subject: [PATCH] Allow backend objects to move between sync and get --- chainqueue/store/base.py | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/chainqueue/store/base.py b/chainqueue/store/base.py index 8556b89..124af03 100644 --- 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()