@Test // disabled due to antlr incompatibility between Pig (which requires antlr 3.4) and Hive (3.0.x) public void testHiveServer() throws Exception { TServer server = ctx.getBean("hive-server", TServer.class); assertNotNull(server); assertTrue(server.isServing()); }
@Override public void start() { logger.info("Starting thrift source"); ExecutorService sourceService; ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("Flume Thrift IPC Thread %d").build(); if (maxThreads == 0) { sourceService = Executors.newCachedThreadPool(threadFactory); } else { sourceService = Executors.newFixedThreadPool(maxThreads, threadFactory); } try { serverTransport = new TNonblockingServerSocket(new InetSocketAddress(bindAddress, port)); } catch (TTransportException e) { throw new FlumeException("Failed to start Thrift Source.", e); } THsHaServer.Args thhsArgs = new THsHaServer.Args(serverTransport); thhsArgs.processor(new ThriftSourceProtocol.Processor(new ThriftSourceHandler())); // thhsArgs.transportFactory(new TFramedTransport.Factory()); thhsArgs.protocolFactory(new TBinaryProtocol.Factory()); thhsArgs.executorService(sourceService); server = new THsHaServer(thhsArgs); // 半同步半异步的服务模型 servingExecutor = Executors.newSingleThreadExecutor( new ThreadFactoryBuilder().setNameFormat("Flume Thrift Source I/O Boss").build()); /** Start serving. */ servingExecutor.submit( new Runnable() { @Override public void run() { server.serve(); } }); long timeAfterStart = System.currentTimeMillis(); while (!server.isServing()) { try { if (System.currentTimeMillis() - timeAfterStart >= 10000) { throw new FlumeException("Thrift server failed to start!"); } TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new FlumeException("Interrupted while waiting for Thrift server" + " to start.", e); } } sourceCounter.start(); logger.info("Started Thrift source."); super.start(); }
/** * Stop this TachyonWorker. Stop all the threads belong to this TachyonWorker. * * @throws IOException * @throws InterruptedException */ public void stop() throws IOException, InterruptedException { mStop = true; mWorkerStorage.stop(); mDataServer.close(); mServer.stop(); mServerTNonblockingServerSocket.close(); mExecutorService.shutdown(); while (!mDataServer.isClosed() || mServer.isServing() || mHeartbeatThread.isAlive()) { // TODO The reason to stop and close again is due to some issues in Thrift. mServer.stop(); mServerTNonblockingServerSocket.close(); CommonUtils.sleepMs(null, 100); } mHeartbeatThread.join(); }
public void stop() { if (server != null && server.isServing()) { server.stop(); } servingExecutor.shutdown(); try { if (!servingExecutor.awaitTermination(5, TimeUnit.SECONDS)) { servingExecutor.shutdownNow(); } } catch (InterruptedException e) { throw new FlumeException("Interrupted while waiting for server to be " + "shutdown."); } sourceCounter.stop(); // Thrift will shutdown the executor passed to it. super.stop(); }
/** Start serving the Thrift server. Returns when the server is up. */ public void startServer() { Runnable r = new Runnable() { @Override public void run() { try { serve(); } catch (Exception e) { LOG.fatal("Unexpected error in server main loop!", e); } } }; serverThread = new Thread(r, "Client Thrift Server thread"); serverThread.start(); try { while (server == null || !server.isServing()) { LOG.debug("waiting for smart client daemon server to come online..."); Thread.sleep(100); } LOG.debug("smart client server is online."); } catch (InterruptedException e) { throw new RuntimeException("Interrupted waiting for server thread to start", e); } }
public final boolean isServing() { final TServer thriftServer = this.thriftServer; return thriftServer != null && thriftServer.isServing(); }