Browse Source

Add traceback for daemon errors

master
Neil Booth 8 years ago
parent
commit
b01933913f
  1. 9
      server/block_processor.py
  2. 5
      server/controller.py
  3. 6
      server/daemon.py

9
server/block_processor.py

@ -15,7 +15,7 @@ import time
from collections import defaultdict
from functools import partial
from server.daemon import Daemon, DaemonError
from server.daemon import DaemonError
from server.version import VERSION
from lib.hash import hash_to_str
from lib.util import chunks, formatted_time, LoggedClass
@ -138,8 +138,9 @@ class BlockProcessor(server.db.DB):
Coordinate backing up in case of chain reorganisations.
'''
def __init__(self, env):
def __init__(self, env, daemon):
super().__init__(env)
self.daemon = daemon
# These are our state as we move ahead of DB state
self.fs_height = self.db_height
@ -148,7 +149,6 @@ class BlockProcessor(server.db.DB):
self.tip = self.db_tip
self.tx_count = self.db_tx_count
self.daemon = Daemon(self.coin.daemon_urls(env.daemon_url))
self.caught_up_event = asyncio.Event()
self.task_queue = asyncio.Queue()
self.stop = False
@ -195,7 +195,8 @@ class BlockProcessor(server.db.DB):
pass
self.logger.info('preparing clean shutdown')
self.stop = True
self.add_task(do_nothing) # Ensure something is on the queue
# Ensure something is on the queue so main_loop notices self.stop
self.add_task(do_nothing)
async def main_loop(self):
'''Main loop for block processing.'''

5
server/controller.py

@ -21,6 +21,7 @@ from lib.jsonrpc import JSONRPC, RPCError, RequestBase
from lib.hash import sha256, double_sha256, hash_to_str, hex_str_to_hash
import lib.util as util
from server.block_processor import BlockProcessor
from server.daemon import Daemon
from server.irc import IRC
from server.session import LocalRPC, ElectrumX
from server.mempool import MemPool
@ -54,8 +55,8 @@ class Controller(util.LoggedClass):
self.loop = asyncio.get_event_loop()
self.start = time.time()
self.coin = env.coin
self.bp = BlockProcessor(env)
self.daemon = self.bp.daemon
self.daemon = Daemon(env.coin.daemon_urls(env.daemon_url))
self.bp = BlockProcessor(env, self.daemon)
self.mempool = MemPool(self.bp)
self.irc = IRC(env)
self.env = env

6
server/daemon.py

@ -10,6 +10,7 @@ daemon.'''
import asyncio
import json
import traceback
import aiohttp
@ -82,11 +83,14 @@ class Daemon(util.LoggedClass):
except aiohttp.ClientConnectionError:
log_error('connection problem - is your daemon running?')
except self.DaemonWarmingUpError:
log_error('still starting up checking blocks.')
log_error('starting up checking blocks.')
except (asyncio.CancelledError, DaemonError):
raise
except Exception as e:
self.log_error(traceback.format_exc())
self.log_error('response was: {}'.format(resp))
log_error('request gave unexpected error: {}.'.format(e))
if secs >= max_secs and len(self.urls) > 1:
self.url_index = (self.url_index + 1) % len(self.urls)
logged_url = self.logged_url(self.urls[self.url_index])

Loading…
Cancel
Save