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()
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))
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