diff --git a/docs/RELEASE-NOTES b/docs/RELEASE-NOTES index cf34aed..aea65ec 100644 --- a/docs/RELEASE-NOTES +++ b/docs/RELEASE-NOTES @@ -1,3 +1,10 @@ +Version 0.2.2.1 +--------------- + +- fixes issues #12, #13 +- only attempt to flush on asyncio.CancelledError to avoid spurious + secondary errors + Version 0.2.2 ------------- diff --git a/server/block_processor.py b/server/block_processor.py index feb4eee..1eee6b1 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -382,8 +382,9 @@ class BlockProcessor(server.db.DB): while True: await self._wait_for_update() await asyncio.sleep(0) # Yield - finally: + except asyncio.CancelledError: self.flush(True) + raise async def _wait_for_update(self): '''Wait for the prefetcher to deliver blocks or a mempool update. @@ -535,6 +536,9 @@ class BlockProcessor(server.db.DB): self.height - self.db_height)) self.utxo_cache.flush(batch) self.utxo_flush_count = self.flush_count + self.db_tx_count = self.tx_count + self.db_height = self.height + self.db_tip = self.tip def assert_flushed(self): '''Asserts state is fully flushed.''' @@ -572,13 +576,6 @@ class BlockProcessor(server.db.DB): self.flush_state(batch) self.logger.info('committing transaction...') - # Update our in-memory state after successful flush - self.db_tx_count = self.tx_count - self.db_height = self.height - self.db_tip = self.tip - self.tx_hashes = [] - self.headers = [] - # Update and put the wall time again - otherwise we drop the # time it took to commit the batch self.flush_state(self.db) @@ -670,6 +667,8 @@ class BlockProcessor(server.db.DB): os.sync() + self.tx_hashes = [] + self.headers = [] self.logger.info('FS flush took {:.1f} seconds' .format(time.time() - flush_start)) diff --git a/server/db.py b/server/db.py index 414eb75..51b2c59 100644 --- a/server/db.py +++ b/server/db.py @@ -119,7 +119,6 @@ class DB(LoggedClass): if tx_height > self.db_height: return None, tx_height - raise self.DBError('tx_num {:,d} is not on disk') file_pos = tx_num * 32 file_num, offset = divmod(file_pos, self.tx_hash_file_size) diff --git a/server/protocol.py b/server/protocol.py index 0ea78f6..5f5ae54 100644 --- a/server/protocol.py +++ b/server/protocol.py @@ -331,8 +331,8 @@ class ElectrumX(JSONRPC): @classmethod def watched_address_count(cls): - sessions = self.SESSION_MGR.sessions - return sum(len(session.hash168s) for session in session + sessions = cls.SESSION_MGR.sessions + return sum(len(session.hash168s) for session in sessions if isinstance(session, cls)) @classmethod diff --git a/server/version.py b/server/version.py index 79efc29..e6541a2 100644 --- a/server/version.py +++ b/server/version.py @@ -1 +1 @@ -VERSION = "ElectrumX 0.2.2" +VERSION = "ElectrumX 0.2.2.1"