Rehabilitate start, resume
This commit is contained in:
parent
81dd5753e8
commit
5cf8b4f296
@ -79,7 +79,7 @@ class SyncerBackend:
|
|||||||
"""
|
"""
|
||||||
self.connect()
|
self.connect()
|
||||||
pair = self.db_object.cursor()
|
pair = self.db_object.cursor()
|
||||||
filter_state = self.db_object_filter.filter()
|
filter_state = self.db_object_filter.cursor()
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
return (pair, filter_state,)
|
return (pair, filter_state,)
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ class SyncerBackend:
|
|||||||
"""
|
"""
|
||||||
self.connect()
|
self.connect()
|
||||||
pair = self.db_object.set(block_height, tx_height)
|
pair = self.db_object.set(block_height, tx_height)
|
||||||
filter_state = self.db_object_filter.filter()
|
filter_state = self.db_object_filter.cursor()
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
return (pair, filter_state,)
|
return (pair, filter_state,)
|
||||||
|
|
||||||
|
@ -54,11 +54,11 @@ class BlockchainSyncFilter(SessionBase):
|
|||||||
|
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
return self.flags_start
|
return int.from_bytes(self.flags_start, 'big')
|
||||||
|
|
||||||
|
|
||||||
def cursor(self):
|
def cursor(self):
|
||||||
return self.flags_current
|
return int.from_bytes(self.flags, 'big')
|
||||||
|
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
@ -68,12 +68,19 @@ class BlockchainSyncFilter(SessionBase):
|
|||||||
def target(self):
|
def target(self):
|
||||||
n = 0
|
n = 0
|
||||||
for i in range(self.count):
|
for i in range(self.count):
|
||||||
n |= 2 << i
|
n |= (1 << self.count) - 1
|
||||||
return n
|
return n
|
||||||
|
|
||||||
|
|
||||||
def set(self, n):
|
def set(self, n):
|
||||||
if self.flags & n > 0:
|
if n > self.count:
|
||||||
|
raise IndexError('bit flag out of range')
|
||||||
|
|
||||||
|
b = 1 << (n % 8)
|
||||||
|
i = int((n - 1) / 8 + 1)
|
||||||
|
if self.flags[i] & b > 0:
|
||||||
SessionBase.release_session(session)
|
SessionBase.release_session(session)
|
||||||
raise AttributeError('Filter bit already set')
|
raise AttributeError('Filter bit already set')
|
||||||
r.flags |= n
|
flags = bytearray(self.flags)
|
||||||
|
flags[i] |= b
|
||||||
|
self.flags = flags
|
||||||
|
@ -126,6 +126,7 @@ class BlockchainSync(SessionBase):
|
|||||||
"""
|
"""
|
||||||
self.block_cursor = block_height
|
self.block_cursor = block_height
|
||||||
self.tx_cursor = tx_height
|
self.tx_cursor = tx_height
|
||||||
|
return (self.block_cursor, self.tx_cursor,)
|
||||||
|
|
||||||
|
|
||||||
def cursor(self):
|
def cursor(self):
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# standard imports
|
# standard imports
|
||||||
import unittest
|
import unittest
|
||||||
|
import logging
|
||||||
|
|
||||||
# external imports
|
# external imports
|
||||||
from chainlib.chain import ChainSpec
|
from chainlib.chain import ChainSpec
|
||||||
@ -12,6 +13,9 @@ from chainsyncer.backend import SyncerBackend
|
|||||||
# testutil imports
|
# testutil imports
|
||||||
from tests.base import TestBase
|
from tests.base import TestBase
|
||||||
|
|
||||||
|
logg = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
class TestDatabase(TestBase):
|
class TestDatabase(TestBase):
|
||||||
|
|
||||||
|
|
||||||
@ -49,7 +53,31 @@ class TestDatabase(TestBase):
|
|||||||
session = SessionBase.create_session()
|
session = SessionBase.create_session()
|
||||||
o = session.query(BlockchainSyncFilter).get(filter_id)
|
o = session.query(BlockchainSyncFilter).get(filter_id)
|
||||||
self.assertEqual(len(o.flags), 2)
|
self.assertEqual(len(o.flags), 2)
|
||||||
|
|
||||||
|
t = o.target()
|
||||||
|
self.assertEqual(t, (1 << 9) - 1)
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
o.set(i)
|
||||||
|
|
||||||
|
c = o.cursor()
|
||||||
|
self.assertEqual(c, t)
|
||||||
|
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
|
|
||||||
|
def test_backend_resume(self):
|
||||||
|
s = SyncerBackend.live(self.chain_spec, 42)
|
||||||
|
s.register_filter('foo')
|
||||||
|
s.register_filter('bar')
|
||||||
|
s.register_filter('baz')
|
||||||
|
|
||||||
|
s.set(42, 13)
|
||||||
|
|
||||||
|
s = SyncerBackend.first(self.chain_spec)
|
||||||
|
logg.debug('start {}'.format(s))
|
||||||
|
self.assertEqual(s.get(), ((42,13), 0))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user