def start_thrift_server(self):
        processor = Echoer.Processor(EchoHandler())
        transport = TSocket.TServerSocket(port=12346)
        protocol_factory = TCompactProtocol.TCompactProtocolFactory()

        self.thrift_server = TNonblockingServer(processor, transport,
                                                protocol_factory,
                                                protocol_factory)

        ready = threading.Condition()
        ready.value = False

        def callback():
            ready.acquire()
            ready.value = True
            ready.notify()
            ready.release()

        def serve(instance):
            try:
                instance.thrift_server.serve(ready_callback=callback)
                instance.thrift_server.close()
            except RuntimeError:
                instance.thrift_server_error = sys.exc_info()

        self.thrift_server_thread = threading.Thread(target=serve, args=[self])
        self.thrift_server_thread.start()

        # Wait for the thrift server to be ready
        ready.acquire()
        while ready.value is not True:
            ready.wait()
        ready.release()
예제 #2
0
    def start_server(self):
        """
        Registers the host and root scheduler processors and
        starts the thrift server.
        """
        mux_processor = TMultiplexedProcessor()

        if self._hostHandler:
            self._register_processer("Host", mux_processor)

        if self._leafSchedulerHandler:
            self._register_processer("Scheduler", mux_processor)

        if self._rootSchedulerHandler:
            self._register_processer("RootScheduler", mux_processor)

        if self._enable_ping:
            self._register_processer("AgentControl", mux_processor)

        transport = TSocket.TServerSocket(self._address, self._port)

        protocol_factory = TCompactProtocol.TCompactProtocolFactory()

        self._server = TNonblockingServer(mux_processor, transport,
                                          protocol_factory, protocol_factory)

        self._thread = threading.Thread(target=self._server.serve)
        self._thread.daemon = True
        self._thread.start()
        self._server_started = True

        self._logger.info(
            "[ThriftServer] Thrift server started. Address: {0} Port: {1}".
            format(self._address, self._port))
예제 #3
0
    def _initialize_thrift_service(self):
        """ Initialize the thrift server. """
        mux_processor = TMultiplexedProcessor()

        for plugin in thrift_services():
            self._logger.info("Load thrift services %s (num_threads: %d)",
                              plugin.name, plugin.num_threads)
            handler = plugin.handler
            processor = plugin.service.Processor(handler)
            mux_processor.registerProcessor(plugin.name, processor,
                                            plugin.num_threads,
                                            plugin.max_entries)

        transport = TSocket.TServerSocket(port=self._config.host_port)
        protocol_factory = TCompactProtocol.TCompactProtocolFactory()

        server = TNonblockingServer(mux_processor, transport, protocol_factory,
                                    protocol_factory)
        self._server = server