Example #1
0
 def start(self):
     '''
     Start the IOLoop. Will allow messages to be send and received
     asynchronously on the pub and router ZMQStreams.
     '''
     log.info('Starting broker')
     self.loop.start()
Example #2
0
 def start(self):
     '''
     Start the IOLoop. Will allow messages to be send and received
     asynchronously on the pub and router ZMQStreams.
     '''
     log.info('Starting broker')
     self.loop.start()
Example #3
0
    def stop(self):
        log.info('Stopping broker')
        self.running = False

        self.loop.stop()

        node_ids = self.node_pids.keys()

        for node_id in node_ids:
            self.stop_node(node_id)
Example #4
0
    def stop(self):
        log.info('Stopping broker')
        self.running = False

        self.loop.stop()
        
        node_ids = list(self.node_pids.keys())
        
        for node_id in node_ids:
            self.stop_node(node_id)    
Example #5
0
    def stop_node(self, node_id):
        '''
        Sends SIGTERM to the named node.

        Node implementations should catch it and shutdown because killing procs is
        risky business.
        '''
        log.info("Stopping node " + node_id)
        self.node_pids[node_id].terminate()
        del self.node_pids[node_id]
        pass
Example #6
0
    def stop_node(self, node_id):
        '''
        Sends SIGTERM to the named node.

        Node implementations should catch it and shutdown because killing procs is
        risky business.
        '''
        log.info("Stopping node " + node_id)
        self.node_pids[node_id].terminate()
        del self.node_pids[node_id]
        pass        
Example #7
0
    def receive_message(self, msg_frames):
        '''
        Assembles message from raw frames and dispatch it.

        msgs should be a list of two bytes values, the first being the ZMQ ID for
        the sender, and the second being the JSON message from the nodes.
        '''
        zmq_msg = ZMQMessage.from_zmq_frames(msg_frames)

        if zmq_msg["type"] == "helloResponse":
            log.debug("RECV %s: %s" % (zmq_msg['source'], msg_frames[2]))
        else:
            log.debug("RECV %s: %s" % (self.zid_node.get(
                msg_frames[0], "unknown node"), msg_frames[2]))

        if zmq_msg["type"] == "helloResponse":
            node_name = zmq_msg['source']
            if node_name in self.node_zid:
                err = "Duplicate hello from " + node_name
                log.debug(err)

            self.node_zid[node_name] = zmq_msg.identity
            self.zid_node[zmq_msg.identity] = node_name

            log.info(node_name + " connected")

            self.ds.nodes[node_name].set_state(Node.STATE_RUNNING)

            self.router.send_multipart([
                zmq_msg.identity, "",
                json.dumps({
                    "type": "ack",
                    "original": zmq_msg.fields
                })
            ])

        elif zmq_msg["type"] == "log":
            pass
        else:
            self.router.send_multipart([
                zmq_msg.identity, "",
                json.dumps({
                    "type": "ack",
                    "original": zmq_msg.fields
                })
            ])

            msg = zmq_msg.to_msg()
            if msg is not None:
                self.ds.process_message(msg,
                                        source=self.zid_node.get(
                                            msg_frames[0]))
Example #8
0
    def stop_node(self, node_id):
        '''
        Sends SIGTERM to the named node.

        Node implementations should catch it and shutdown because killing procs is
        risky business.
        '''
        log.info("Stopping node " + node_id)
        
        rc = self.node_pids[node_id].poll()
        if rc is not None:
            rc = self.node_pids[node_id].wait()
            log.warning("Node {} had already exited (rc = {})".format(node_id, rc))
        else:
            self.node_pids[node_id].terminate()
            
        del self.node_pids[node_id]        
Example #9
0
    def stop_node(self, node_id):
        '''
        Sends SIGTERM to the named node.

        Node implementations should catch it and shutdown because killing procs is
        risky business.
        '''
        log.info("Stopping node " + node_id)

        rc = self.node_pids[node_id].poll()
        if rc is not None:
            rc = self.node_pids[node_id].wait()
            log.warning("Node {} had already exited (rc = {})".format(
                node_id, rc))
        else:
            self.node_pids[node_id].terminate()

        del self.node_pids[node_id]
Example #10
0
    def receive_message(self, msg_frames):
        '''
        Assembles message from raw frames and dispatch it.

        msgs should be a list of two bytes values, the first being the ZMQ ID for
        the sender, and the second being the JSON message from the nodes.
        '''
        zmq_msg = ZMQMessage.from_zmq_frames(msg_frames)

        if zmq_msg["type"] == "helloResponse":
            log.debug("RECV %s: %s" % (zmq_msg['source'], msg_frames[2]))
        else:
            log.debug("RECV %s: %s" % (self.zid_node.get(msg_frames[0], "unknown node"), msg_frames[2]))
 
        if zmq_msg["type"] == "helloResponse":        
            node_name = zmq_msg['source']
            if node_name in self.node_zid:
                err = "Duplicate hello from " + node_name
                log.debug(err)
    
            self.node_zid[node_name] = zmq_msg.identity
            self.zid_node[zmq_msg.identity] = node_name
        
            log.info(node_name + " connected")
            
            self.ds.nodes[node_name].set_state(Node.STATE_RUNNING)

            self.router.send_multipart([zmq_msg.identity,
                                        "".encode(),
                                        json.dumps({"type": "ack", "original": zmq_msg.fields}).encode()])

        elif zmq_msg["type"] == "log":
            pass
        else:
            self.router.send_multipart([zmq_msg.identity,
                                        "".encode(),
                                        json.dumps({"type": "ack", "original": zmq_msg.fields}).encode()])
            
            msg = zmq_msg.to_msg()
            if msg is not None:
                self.ds.process_message(msg, source = self.zid_node.get(msg_frames[0]))