chainsyncer

Blockchain syncer driver
Log | Files | Refs | LICENSE

commit b9eb8a68a6390c4193ab73610c0c0b256fc2951a
parent bc135759e8db68ecd6582d6adf46ac405c79ea51
Author: lash <dev@holbrook.no>
Date:   Thu, 13 Oct 2022 07:52:00 +0000

Avoid crash when no registered filters

Diffstat:
MCHANGELOG | 2++
Mchainsyncer/filter.py | 1+
Mchainsyncer/store/base.py | 24++++++++++++++----------
Mrequirements.txt | 2+-
Mrun_tests.sh | 2+-
5 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,3 +1,5 @@ +* 0.5.0 + - Avoid crash on no registered filters * 0.4.8 - Add unlock action description to info loglevel for unlock tool * 0.4.7 diff --git a/chainsyncer/filter.py b/chainsyncer/filter.py @@ -54,6 +54,7 @@ class FilterState: self.peek = self.state_store.peek self.from_name = self.state_store.from_name self.list = self.state_store.list + self.count = self.state_store.count self.state_store.sync() self.all = self.state_store.all self.started = False diff --git a/chainsyncer/store/base.py b/chainsyncer/store/base.py @@ -51,11 +51,14 @@ class SyncItem: if filter_state & self.filter_state.from_name('LOCK') > 0 and not ignore_lock: raise LockError(self.state_key) - self.count = len(self.filter_state.all(pure=True)) - 4 + all_states = self.filter_state.all(pure=True) + logg.info('all {}'.format(all_states)) + self.count = len(all_states) - 5 + logg.info('sounce {}'.format(self.count)) self.skip_filter = False - if self.count == 0: - self.skip_filter = True - elif not started: + #if self.count == 0: + # self.skip_filter = True + if not started: self.filter_state.move(self.state_key, self.filter_state.from_name('RESET')) @@ -68,10 +71,11 @@ class SyncItem: def reset(self, check_incomplete=True): if check_incomplete: - if self.filter_state.state(self.state_key) & self.filter_state.from_name('LOCK') > 0: - raise LockError('reset attempt on {} when state locked'.format(self.state_key)) - if self.filter_state.state(self.state_key) & self.filter_state.from_name('DONE') == 0: - raise IncompleteFilterError('reset attempt on {} when incomplete'.format(self.state_key)) + if self.count > 0: + if self.filter_state.state(self.state_key) & self.filter_state.from_name('LOCK') > 0: + raise LockError('reset attempt on {} when state locked'.format(self.state_key)) + if self.filter_state.state(self.state_key) & self.filter_state.from_name('DONE') == 0: + raise IncompleteFilterError('reset attempt on {} when incomplete'.format(self.state_key)) self.filter_state.move(self.state_key, self.filter_state.from_name('RESET')) @@ -101,8 +105,8 @@ class SyncItem: def advance(self, ignore_lock=False): - if self.skip_filter: - raise FilterDone() + #if self.skip_filter: + # raise FilterDone() self.__check_done() if self.filter_state.state(self.state_key) & self.filter_state.from_name('LOCK') > 0: diff --git a/requirements.txt b/requirements.txt @@ -2,4 +2,4 @@ confini~=0.6.1 semver==2.13.0 hexathon~=0.1.7 chainlib~=0.3.0 -shep~=0.2.9 +shep~=0.2.10 diff --git a/run_tests.sh b/run_tests.sh @@ -9,7 +9,7 @@ for f in `ls tests/*.py`; do fi done -for f in `ls tests/store/*.py`; do +for f in `ls tests/store/test_*_*.py`; do python $f if [ $? -gt 0 ]; then exit