commit 3e487d07028fbccc55ec0d30a30b7d1b5387178a
parent bdd678fb3f9fa5af07601791dfed959f1d4c4158
Author: nolash <dev@holbrook.no>
Date: Tue, 1 Jun 2021 13:47:55 +0200
Add purge queue entry method
Diffstat:
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/chainqueue/fs/cache.py b/chainqueue/fs/cache.py
@@ -72,22 +72,35 @@ class FsQueue:
return int.from_bytes(b, byteorder='big')
+
def get(self, key):
idx = self.__get_backend_idx(key)
return self.backend.get(idx)
- def move(self, key, queuestate_from, queuestate_to):
+ def move(self, key, to_state, from_state=None):
key_hex = key.hex()
- cur_path = os.path.join(self.path_state[queuestate_from], key_hex)
+ cur_path = os.path.join(self.path_state[from_state], key_hex)
fi = os.lstat(cur_path)
if not stat.S_ISLNK(fi.st_mode):
logg.error('no such entry {}'.format(cur_path))
raise FileNotFoundError(key_hex)
- new_path = os.path.join(self.path_state[queuestate_to], key_hex)
+ new_path = os.path.join(self.path_state[to_state], key_hex)
os.rename(cur_path, new_path)
+ def purge(self, key, queuestate):
+ key_hex = key.hex()
+ cur_path = os.path.join(self.path_state[queuestate], key_hex)
+ active_path = os.path.join(self.index_path, key_hex)
+ try:
+ fi = os.stat(cur_path)
+ os.unlink(active_path)
+ except FileNotFoundError:
+ os.unlink(cur_path)
+
+ logg.debug('purge queue entry {}'.format(key_hex))
+
def set(self, key, status):
idx = self.__get_backend_idx(key)
diff --git a/tests/test_fs.py b/tests/test_fs.py
@@ -54,7 +54,7 @@ class HexDirTest(unittest.TestCase):
tx_hash = os.urandom(32)
tx_content = os.urandom(128)
self.q.add(tx_hash, tx_content)
- self.q.move(tx_hash, 'new', 'ready')
+ self.q.move(tx_hash, 'ready', from_state='new')
f = open(os.path.join(self.q.path_state['ready'], tx_hash.hex()), 'rb')
r = f.read()
@@ -62,5 +62,21 @@ class HexDirTest(unittest.TestCase):
self.assertEqual(r, b'\x00' * 8)
+ def test_purge(self):
+ tx_hash = os.urandom(32)
+ tx_content = os.urandom(128)
+ self.q.add(tx_hash, tx_content)
+ self.q.move(tx_hash, 'ready', from_state='new')
+ self.q.purge(tx_hash, 'ready')
+
+ with self.assertRaises(FileNotFoundError):
+ entry_path = os.path.join(self.q.path_state['ready'], tx_hash.hex())
+ os.stat(entry_path)
+
+ with self.assertRaises(FileNotFoundError):
+ entry_path = os.path.join(self.q.index_path, tx_hash.hex())
+ os.stat(entry_path)
+
+
if __name__ == '__main__':
unittest.main()