mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-17 22:24:23 +01:00
Removes sleep flag from Watcher and Responder
The sleep flag was used to avoid doing useless work when no data was hold by the tower. However, from the implementation of the data persistence on, the Watcher and Responder should at least keep track of the last known block. The current apporach was making this harder.
This commit is contained in:
@@ -19,6 +19,10 @@ class ChainMonitor:
|
||||
The :class:`ChainMonitor` monitors the chain using two methods: ``zmq`` and ``polling``. Blocks are only notified
|
||||
once per queue and the notification is triggered by the method that detects the block faster.
|
||||
|
||||
Args:
|
||||
watcher_queue (:obj:`Queue`): the queue to be used to send blocks hashes to the ``Watcher``.
|
||||
responder_queue (:obj:`Queue`): the queue to be used to send blocks hashes to the ``Responder``.
|
||||
|
||||
Attributes:
|
||||
best_tip (:obj:`str`): a block hash representing the current best tip.
|
||||
last_tips (:obj:`list`): a list of last chain tips. Used as a sliding window to avoid notifying about old tips.
|
||||
@@ -30,11 +34,9 @@ class ChainMonitor:
|
||||
watcher_queue (:obj:`Queue`): a queue to send new best tips to the :obj:`Watcher <pisa.watcher.Watcher>`.
|
||||
responder_queue (:obj:`Queue`): a queue to send new best tips to the
|
||||
:obj:`Responder <pisa.responder.Responder>`.
|
||||
watcher_asleep (:obj:`bool`): a flag that signals whether to send information to the ``Watcher`` or not.
|
||||
responder_asleep (:obj:`bool`): a flag that signals whether to send information to the ``Responder`` or not.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, watcher_queue, responder_queue):
|
||||
self.best_tip = None
|
||||
self.last_tips = []
|
||||
self.terminate = False
|
||||
@@ -48,53 +50,21 @@ class ChainMonitor:
|
||||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashblock")
|
||||
self.zmqSubSocket.connect("%s://%s:%s" % (FEED_PROTOCOL, FEED_ADDR, FEED_PORT))
|
||||
|
||||
self.watcher_queue = None
|
||||
self.responder_queue = None
|
||||
self.watcher_asleep = True
|
||||
self.responder_asleep = True
|
||||
|
||||
def attach_watcher(self, queue, asleep):
|
||||
"""
|
||||
Attaches a :obj:`Watcher <pisa.watcher.Watcher>` to the :class:`ChainMonitor`. The ``Watcher`` and the
|
||||
``ChainMonitor`` are connected via the ``watcher_queue`` and the ``watcher_asleep`` flag.
|
||||
|
||||
Args:
|
||||
queue (:obj:`Queue`): the queue to be used to send blocks hashes to the ``Watcher``.
|
||||
asleep( :obj:`bool`): whether the ``Watcher`` is initially awake or asleep. It is changed on the fly from
|
||||
the ``Watcher`` when the state changes.
|
||||
"""
|
||||
|
||||
self.watcher_queue = queue
|
||||
self.watcher_asleep = asleep
|
||||
|
||||
def attach_responder(self, queue, asleep):
|
||||
"""
|
||||
Attaches a :obj:`Responder <pisa.responder.Responder>` to the :class:`ChainMonitor`. The ``Responder`` and the
|
||||
``ChainMonitor`` are connected via the ``responder_queue`` and the ``responder_asleep`` flag.
|
||||
|
||||
Args:
|
||||
queue (:obj:`Queue`): the queue to be used to send blocks hashes to the ``Responder``.
|
||||
asleep( :obj:`bool`): whether the ``Responder`` is initially awake or asleep. It is changed on the fly from
|
||||
the ``Responder`` when the state changes.
|
||||
"""
|
||||
|
||||
self.responder_queue = queue
|
||||
self.responder_asleep = asleep
|
||||
self.watcher_queue = watcher_queue
|
||||
self.responder_queue = responder_queue
|
||||
|
||||
def notify_subscribers(self, block_hash):
|
||||
"""
|
||||
Notifies the subscribers (``Watcher`` and ``Responder``) about a new block provided they are awake. It does so
|
||||
by putting the hash in the corresponding queue(s).
|
||||
Notifies the subscribers (``Watcher`` and ``Responder``) about a new block. It does so by putting the hash in
|
||||
the corresponding queue(s).
|
||||
|
||||
Args:
|
||||
block_hash (:obj:`str`): the new block hash to be sent to the awake subscribers.
|
||||
block_hash (:obj:`str`): the new block hash to be sent to the subscribers.
|
||||
block_hash (:obj:`str`): the new block hash to be sent to the subscribers.
|
||||
"""
|
||||
|
||||
if not self.watcher_asleep:
|
||||
self.watcher_queue.put(block_hash)
|
||||
|
||||
if not self.responder_asleep:
|
||||
self.responder_queue.put(block_hash)
|
||||
self.watcher_queue.put(block_hash)
|
||||
self.responder_queue.put(block_hash)
|
||||
|
||||
def update_state(self, block_hash, max_block_window_size=BLOCK_WINDOW_SIZE):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user