Ejemplo n.º 1
0
        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)
Ejemplo n.º 2
0
    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())
Ejemplo n.º 3
0
 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
         )
Ejemplo n.º 4
0
    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())
Ejemplo n.º 5
0
        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)
Ejemplo n.º 6
0
        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)