Browse Source

daemon: getting height optionally gets mempool

Improve daemon startup log message
master
Neil Booth 8 years ago
parent
commit
ac48695db8
  1. 14
      server/block_processor.py
  2. 16
      server/daemon.py
  3. 2
      server/mempool.py

14
server/block_processor.py

@ -67,8 +67,13 @@ class Prefetcher(LoggedClass):
async def main_loop(self):
'''Loop forever polling for more blocks.'''
self.logger.info('catching up to daemon height {:,d}...'
.format(await self.daemon.height()))
daemon_height = await self.daemon.height()
if daemon_height > height:
log_msg = 'catching up to daemon height {:,d}...'
else:
log_msg = 'caught up to daemon height {:,d}'
self.logger.info(log_msg.format(daemon_height))
while True:
try:
secs = 0
@ -87,10 +92,7 @@ class Prefetcher(LoggedClass):
'''Prefetch blocks unless the prefetch queue is full.'''
# Refresh the mempool after updating the daemon height, if and
# only if we've caught up
daemon_height = await self.daemon.height()
if self.caught_up:
await self.daemon.refresh_mempool_hashes()
daemon_height = await self.daemon.height(mempool=self.caught_up)
cache_room = self.target_cache_size // self.ave_size
with await self.semaphore:
# Try and catch up all blocks but limit to room in cache.

16
server/daemon.py

@ -36,7 +36,7 @@ class Daemon(util.LoggedClass):
self.urls = urls
self.url_index = 0
self._height = None
self.mempool_hashes = set()
self._mempool_hashes = set()
self.mempool_refresh_event = asyncio.Event()
# Limit concurrent RPC calls to this number.
# See DEFAULT_HTTP_WORKQUEUE in bitcoind, which is typically 16
@ -150,10 +150,9 @@ class Daemon(util.LoggedClass):
# Convert hex string to bytes
return [bytes.fromhex(block) for block in blocks]
async def refresh_mempool_hashes(self):
async def mempool_hashes(self):
'''Update our record of the daemon's mempool hashes.'''
self.mempool_hashes = set(await self._send_single('getrawmempool'))
self.mempool_refresh_event.set()
return await self._send_single('getrawmempool')
async def estimatefee(self, params):
'''Return the fee estimate for the given parameters.'''
@ -187,11 +186,18 @@ class Daemon(util.LoggedClass):
'''Broadcast a transaction to the network.'''
return await self._send_single('sendrawtransaction', params)
async def height(self):
async def height(self, mempool=False):
'''Query the daemon for its current height.'''
self._height = await self._send_single('getblockcount')
if mempool:
self._mempool_hashes = set(await self.mempool_hashes())
self.mempool_refresh_event.set()
return self._height
def cached_mempool_hashes(self):
'''Return the cached mempool hashes.'''
return self._mempool_hashes
def cached_height(self):
'''Return the cached daemon height.

2
server/mempool.py

@ -54,7 +54,7 @@ class MemPool(util.LoggedClass):
hash168s = self.hash168s
touched = self.touched
hashes = self.daemon.mempool_hashes
hashes = self.daemon.cached_mempool_hashes()
gone = set(txs).difference(hashes)
for hex_hash in gone:
unfetched.discard(hex_hash)

Loading…
Cancel
Save