def start_actor(): if self._nodeid: Events.log(Message("Setting up remoting; node ID = %s" % (self._nodeid,))) try: f1 = ZmqFactory() insock = ZmqPullConnection(f1) outsock = lambda: ZmqPushConnection(f1, linger=0) hub = Hub(insock, outsock, nodeid=self._nodeid) except Exception: err("Could not set up remoting") traceback.print_exc() reactor.stop() return else: Events.log(Message("No remoting requested; specify `--remoting/-r <nodeid>` (nodeid=host:port) to set up remoting")) hub = HubWithNoRemoting() supervision = {'stop': Stop, 'restart': Restart, 'resume': Resume}[self._supervise] node = Node(hub=hub, root_supervision=supervision) try: self._wrapper = node.spawn(Wrapper.using( self._actor_cls.using(**self._init_params), spawn_at=self._name, keep_running=self._keep_running ), name='_runner') except Exception: panic("Failed to start wrapper for %s\n" % (actor_path,), Failure().getTraceback()) reactor.stop() else: if self._initial_message is not _EMPTY: self._wrapper << ('_forward', self._initial_message)
def __handle_failure(self, f): # dbg("deleting self._coroutine") del self._coroutine if isinstance(f.value, CancelledError): return try: f.raiseException() except Exception: try: # XXX: seems like a hack but should be safe; # hard to do it better without convoluting `Actor` self._Actor__cell.tainted = True # dbg("...reporting to parent") self._Actor__cell.report_to_parent() except Exception: # pragma: no cover panic("failure in handle_faiure:\n", traceback.format_exc())
def _manage_heartbeat_and_visibility(self): t = self.reactor.seconds() self._next_heartbeat_t = t + self.HEARTBEAT_INTERVAL try: t_gone = t - self.HEARTBEAT_MAX_SILENCE for addr, conn in self.connections.items(): if conn.seen < t_gone: conn.close() del self.connections[addr] else: conn.heartbeat() except Exception: # pragma: no cover panic("heartbeat logic failed:\n", traceback.format_exc()) finally: self._next_heartbeat = self.reactor.callLater( self.HEARTBEAT_INTERVAL, self._manage_heartbeat_and_visibility )
def get(self, *patterns): # dbg("get") pattern = OR(*patterns) try: if self.__queue: try: ix = self.__queue.index(pattern) except ValueError: pass else: # dbg("next message from queue") return self.__queue.pop(ix) # dbg("ready for message") self.__get_d = _PickyDeferred(pattern, canceller=self.__clear_get_d) self.__get_d.addCallback(self.__clear_get_d) return self.__get_d except Exception: # pragma: no cover panic(traceback.format_exc())
def start_actor(): # if self._nodeid: # log("Setting up remoting; node ID = %s" % (self._nodeid,)) # else: # log("No remoting requested; specify `--remoting/-r <nodeid>` (nodeid=host:port) to set up remoting") self.node = Node(nid=self._nodeid, enable_remoting=True if self._nodeid else False) try: self._wrapper = self.node.spawn(Wrapper.using( self._actor_cls.using(**self._init_params), spawn_at=self._name, keep_running=self._keep_running ), name='_runner') except Exception: panic("Failed to start wrapper for %s\n" % (actor_path,), Failure().getTraceback()) reactor.stop() else: if self._initial_message is not _EMPTY: self._wrapper << ('_forward', self._initial_message)
def start_actor(): # if self._nodeid: # log("Setting up remoting; node ID = %s" % (self._nodeid,)) # else: # log("No remoting requested; specify `--remoting/-r <nodeid>` (nodeid=host:port) to set up remoting") self.node = Node(nid=self._nodeid, enable_remoting=True if self._nodeid else False, enable_relay=self._enable_relay) try: self._wrapper = self.node.spawn(Wrapper.using( self._actor_cls.using(**self._init_params), spawn_at=self._name, keep_running=self._keep_running), name='_runner') except Exception: panic("Failed to start wrapper for %s\n" % (actor_path, ), Failure().getTraceback()) reactor.stop() else: if self._initial_message is not _EMPTY: self._wrapper << ('_forward', self._initial_message)