List of usage examples for org.apache.thrift.server TThreadedSelectorServer TThreadedSelectorServer
public TThreadedSelectorServer(Args args)
From source file:StubServer.java
License:Apache License
public static void main(String argv[]) { try {//from www . j a va2 s .co m int port = 9090; int numThreads = 32; if (argv.length != 1) { usage(); } System.out.println(argv[0]); StubServer mapkeeper = new StubServer(); TServer server = null; if (argv[0].equals("hsha")) { TNonblockingServerTransport trans = new TNonblockingServerSocket(port); THsHaServer.Args args = new THsHaServer.Args(trans); args.transportFactory(new TFramedTransport.Factory()); args.protocolFactory(new TBinaryProtocol.Factory()); args.processor(new MapKeeper.Processor(mapkeeper)); args.workerThreads(numThreads); server = new THsHaServer(args); } else if (argv[0].equals("nonblocking")) { TNonblockingServerTransport trans = new TNonblockingServerSocket(port); TNonblockingServer.Args args = new TNonblockingServer.Args(trans); args.transportFactory(new TFramedTransport.Factory()); args.protocolFactory(new TBinaryProtocol.Factory()); args.processor(new MapKeeper.Processor(mapkeeper)); server = new TNonblockingServer(args); } else if (argv[0].equals("threadpool")) { TServerTransport trans = new TServerSocket(port); TThreadPoolServer.Args args = new TThreadPoolServer.Args(trans); args.transportFactory(new TFramedTransport.Factory()); args.protocolFactory(new TBinaryProtocol.Factory()); args.processor(new MapKeeper.Processor(mapkeeper)); server = new TThreadPoolServer(args); } else if (argv[0].equals("selector")) { TNonblockingServerTransport trans = new TNonblockingServerSocket(port); TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args(trans); args.transportFactory(new TFramedTransport.Factory()); args.protocolFactory(new TBinaryProtocol.Factory()); args.processor(new MapKeeper.Processor(mapkeeper)); args.selectorThreads(4); args.workerThreads(numThreads); server = new TThreadedSelectorServer(args); } else { usage(); } server.serve(); } catch (Exception x) { System.out.println(x.toString() + " " + x.getMessage()); } }
From source file:ch.epfl.eagle.daemon.util.TServers.java
License:Apache License
/** * Launch a multi-threaded Thrift server with the given {@code processor}. Note that * internally this creates an expanding thread pool of at most {@code threads} threads, * and requests are queued whenever that thread pool is saturated. *//* w w w.j av a2s. c om*/ public static void launchThreadedThriftServer(int port, int threads, TProcessor processor) throws IOException { LOG.info("Staring async thrift server of type: " + processor.getClass().toString() + " on port " + port); TNonblockingServerTransport serverTransport; try { serverTransport = new TNonblockingServerSocket(port); } catch (TTransportException e) { throw new IOException(e); } TThreadedSelectorServer.Args serverArgs = new TThreadedSelectorServer.Args(serverTransport); serverArgs.transportFactory(new TFramedTransport.Factory()); serverArgs.protocolFactory(new TBinaryProtocol.Factory()); serverArgs.processor(processor); serverArgs.selectorThreads(SELECTOR_THREADS); serverArgs.workerThreads(threads); TServer server = new TThreadedSelectorServer(serverArgs); new Thread(new TServerRunnable(server)).start(); }
From source file:com.facebook.buck.distributed.build_slave.ThriftCoordinatorServer.java
License:Apache License
public ThriftCoordinatorServer start() throws IOException { LOG.info("Starting ThriftCoordinatorServer."); synchronized (lock) { TNonblockingServerSocket transport; try {/* w w w . j av a 2s . c om*/ transport = new TNonblockingServerSocket(this.port.orElse(0)); // If we initially specified port zero, we would now have the correct value. this.port = OptionalInt.of(transport.getPort()); } catch (TTransportException e) { throw new ThriftException(e); } TThreadedSelectorServer.Args serverArgs = new TThreadedSelectorServer.Args(transport); serverArgs.processor(processor); server = new TThreadedSelectorServer(serverArgs); serverThread = new Thread(() -> Preconditions.checkNotNull(server).serve()); serverThread.start(); } // Note: this call will initialize MinionCountProvider (same Object as eventListener) eventListener.onThriftServerStarted(InetAddress.getLocalHost().getHostName(), port.getAsInt()); return this; }
From source file:com.facebook.buck.distributed.ThriftCoordinatorServer.java
License:Apache License
public ThriftCoordinatorServer start() throws IOException { synchronized (lock) { try {/*from w w w .java 2 s . co m*/ transport = new TNonblockingServerSocket(this.port); } catch (TTransportException e) { throw new ThriftException(e); } TThreadedSelectorServer.Args serverArgs = new TThreadedSelectorServer.Args(transport); serverArgs.processor(processor); server = new TThreadedSelectorServer(serverArgs); serverThread = new Thread(() -> Preconditions.checkNotNull(server).serve()); serverThread.start(); } return this; }
From source file:com.liveramp.hank.partition_server.PartitionServer.java
License:Apache License
protected void startThriftServer() throws TTransportException, IOException, InterruptedException { IfaceWithShutdown handler = null;/*from w w w .j av a 2s . c om*/ try { // Set up the service handler handler = getHandler(); // Launch the thrift server TNonblockingServerSocket serverSocket = new TNonblockingServerSocket(configurator.getServicePort()); TThreadedSelectorServer.Args options = new TThreadedSelectorServer.Args(serverSocket); options.processor(new com.liveramp.hank.generated.PartitionServer.Processor(handler)); options.workerThreads(configurator.getNumConcurrentQueries()); options.selectorThreads(4); options.protocolFactory(new TCompactProtocol.Factory()); options.maxReadBufferBytes = MAX_BUFFER_SIZE; dataServer = new TThreadedSelectorServer(options); LOG.info("Launching Thrift server."); dataServer.serve(); LOG.info("Thrift server exited."); // The Thrift server does not clean up selectors after stopping, which leads to a file descriptor leak. // See https://issues.apache.org/jira/browse/THRIFT-2274 // TODO: when the bug is fixed in Thrift, remove this ugly hack which takes care of the issue List<Selector> selectors = getServerSelectors(dataServer); closeServerSelectors(selectors); // Close the socket serverSocket.close(); } finally { // Always shut down the handler if (handler != null) { LOG.debug("Shutting down Partition Server handler."); handler.shutDown(); } } }
From source file:com.zhentao.thrift.example.CalculatorServer.java
License:Apache License
private static void startServer(Calculator.Processor<CalculatorHandler> processor) throws TTransportException { // TServerTransport serverTransport = new TServerSocket(9090); // TServer server = new TSimpleServer(new Args(serverTransport).processor(processor)); // Use this for a multithreaded server // TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor)); TNonblockingServerTransport serverTransport = new TNonblockingServerSocket(9090); //TServer server = new THsHaServer(new THsHaServer.Args(serverTransport).workerThreads(20).processor(processor)); TServer server = new TThreadedSelectorServer(new TThreadedSelectorServer.Args(serverTransport) .workerThreads(20).selectorThreads(4).acceptQueueSizePerThread(8).processor(processor)); System.out.println("Starting the simple server..."); server.serve();// w w w . j a va2 s . co m System.out.println("started"); }
From source file:de.hzi.helmholtz.ThriftService.ThriftServer.java
public void init(String portNo) throws InterruptedException, TTransportException { try {//from w ww .java2s . c o m if (portNo.equals("")) { System.out.println("Port number is empty"); return; } System.out.println("Starting server on port " + portNo + " ..."); //TSSLTransportFactory.TSSLTransportParameters params = new TSSLTransportFactory.TSSLTransportParameters(); //params.setKeyStore(Properties.THIFT_SSC_PATH, Properties.THRIFT_SSC_PW); ThriftServiceHandler handler = new ThriftServiceHandler(); BiosynThriftService.Processor<ThriftServiceHandler> processor = new BiosynThriftService.Processor<ThriftServiceHandler>( handler); //TServerSocket serverTransport = TSSLTransportFactory.getServerSocket( Integer.valueOf(portNo),1000000000, InetAddress.getByName(Properties.MXBASE_SERVER), params); //TServerTransport serverTransport = new TServerSocket(Integer.valueOf(portNo)); TNonblockingServerTransport trans = new TNonblockingServerSocket(Integer.valueOf(portNo)); //TNonblockingServerTransport serverTransport = new TNonblockingServerSocket(Integer.valueOf(portNo)); TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args(trans); args.transportFactory(new TFramedTransport.Factory()); args.protocolFactory(new TCompactProtocol.Factory());// TBinaryProtocol.Factory()); args.processor(processor); args.selectorThreads(4); args.workerThreads(32); server = new TThreadedSelectorServer(args); //server = new TNonblockingServer(new TNonblockingServer.Args(serverTransport).processor(processor)); //server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor)); server.serve(); //new Thread(this).start(); //while (!server.isServing()) { // Thread.sleep(1); //}; } catch (Exception ex) { System.out.println(ex.toString()); Logger.getLogger(ThriftServer.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:galen.api.server.GalenApiServer.java
License:Apache License
public static void runService(GalenApiRemoteService.Processor processor, int serverPort) { try {/*from ww w. j a va2 s. c o m*/ TNonblockingServerTransport serverTransport = new TNonblockingServerSocket(serverPort); TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args(serverTransport); TServer server = new TThreadedSelectorServer(args.processor(processor)); server.serve(); } catch (Exception e) { e.printStackTrace(); } }
From source file:org.apache.dubbo.rpc.protocol.nativethrift.ThriftProtocol.java
License:Apache License
private <T> Runnable exportThreadedSelectorServer(T impl, Class<T> type, URL url) throws RpcException { TThreadedSelectorServer.Args tArgs = null; String typeName = type.getName(); TServer tserver = null;// w w w. j ava2 s . c o m if (typeName.endsWith(THRIFT_IFACE)) { String processorClsName = typeName.substring(0, typeName.indexOf(THRIFT_IFACE)) + THRIFT_PROCESSOR; try { Class<?> clazz = Class.forName(processorClsName); Constructor constructor = clazz.getConstructor(type); try { TProcessor tprocessor = (TProcessor) constructor.newInstance(impl); processor.registerProcessor(typeName, tprocessor); tserver = serverMap.get(url.getAddress()); if (tserver == null) { /**Solve the problem of only 50 of the default number of concurrent connections*/ TNonblockingServerSocket.NonblockingAbstractServerSocketArgs args = new TNonblockingServerSocket.NonblockingAbstractServerSocketArgs(); /**1000 connections*/ args.backlog(1000); args.bindAddr(new InetSocketAddress(url.getHost(), url.getPort())); /**timeout: 10s */ args.clientTimeout(10000); TNonblockingServerSocket transport = new TNonblockingServerSocket(args); tArgs = new TThreadedSelectorServer.Args(transport); tArgs.workerThreads(200); tArgs.selectorThreads(4); tArgs.acceptQueueSizePerThread(256); tArgs.processor(processor); tArgs.transportFactory(new TFramedTransport.Factory()); tArgs.protocolFactory(new TCompactProtocol.Factory()); } else { return null; // if server is starting, return and do nothing here } } catch (Exception e) { logger.error(e.getMessage(), e); throw new RpcException("Fail to create nativethrift server(" + url + ") : " + e.getMessage(), e); } } catch (Exception e) { logger.error(e.getMessage(), e); throw new RpcException("Fail to create nativethrift server(" + url + ") : " + e.getMessage(), e); } } if (tserver == null && tArgs == null) { logger.error("Fail to create nativethrift server(" + url + ") due to null args"); throw new RpcException("Fail to create nativethrift server(" + url + ") due to null args"); } final TServer thriftServer = new TThreadedSelectorServer(tArgs); serverMap.put(url.getAddress(), thriftServer); new Thread(() -> { logger.info("Start Thrift ThreadedSelectorServer"); thriftServer.serve(); logger.info("Thrift ThreadedSelectorServer started."); }).start(); return () -> { try { logger.info("Close Thrift NonblockingServer"); thriftServer.stop(); } catch (Throwable e) { logger.warn(e.getMessage(), e); } }; }
From source file:org.apache.hadoop.hbase.thrift.ThriftServerRunner.java
License:Apache License
/** * Setting up the thrift TServer/*from w ww. j ava 2s. co m*/ */ private void setupServer() throws Exception { // Construct correct ProtocolFactory TProtocolFactory protocolFactory; if (conf.getBoolean(COMPACT_CONF_KEY, false)) { LOG.debug("Using compact protocol"); protocolFactory = new TCompactProtocol.Factory(); } else { LOG.debug("Using binary protocol"); protocolFactory = new TBinaryProtocol.Factory(); } final TProcessor p = new Hbase.Processor<Hbase.Iface>(handler); ImplType implType = ImplType.getServerImpl(conf); TProcessor processor = p; // Construct correct TransportFactory TTransportFactory transportFactory; if (conf.getBoolean(FRAMED_CONF_KEY, false) || implType.isAlwaysFramed) { if (qop != null) { throw new RuntimeException( "Thrift server authentication" + " doesn't work with framed transport yet"); } transportFactory = new TFramedTransport.Factory(conf.getInt(MAX_FRAME_SIZE_CONF_KEY, 2) * 1024 * 1024); LOG.debug("Using framed transport"); } else if (qop == null) { transportFactory = new TTransportFactory(); } else { // Extract the name from the principal String name = SecurityUtil.getUserFromPrincipal(conf.get("hbase.thrift.kerberos.principal")); Map<String, String> saslProperties = new HashMap<String, String>(); saslProperties.put(Sasl.QOP, qop); TSaslServerTransport.Factory saslFactory = new TSaslServerTransport.Factory(); saslFactory.addServerDefinition("GSSAPI", name, host, saslProperties, new SaslGssCallbackHandler() { @Override public void handle(Callback[] callbacks) throws UnsupportedCallbackException { AuthorizeCallback ac = null; for (Callback callback : callbacks) { if (callback instanceof AuthorizeCallback) { ac = (AuthorizeCallback) callback; } else { throw new UnsupportedCallbackException(callback, "Unrecognized SASL GSSAPI Callback"); } } if (ac != null) { String authid = ac.getAuthenticationID(); String authzid = ac.getAuthorizationID(); if (!authid.equals(authzid)) { ac.setAuthorized(false); } else { ac.setAuthorized(true); String userName = SecurityUtil.getUserFromPrincipal(authzid); LOG.info("Effective user: " + userName); ac.setAuthorizedID(userName); } } } }); transportFactory = saslFactory; // Create a processor wrapper, to get the caller processor = new TProcessor() { @Override public boolean process(TProtocol inProt, TProtocol outProt) throws TException { TSaslServerTransport saslServerTransport = (TSaslServerTransport) inProt.getTransport(); SaslServer saslServer = saslServerTransport.getSaslServer(); String principal = saslServer.getAuthorizationID(); hbaseHandler.setEffectiveUser(principal); return p.process(inProt, outProt); } }; } if (conf.get(BIND_CONF_KEY) != null && !implType.canSpecifyBindIP) { LOG.error("Server types " + Joiner.on(", ").join(ImplType.serversThatCannotSpecifyBindIP()) + " don't support IP " + "address binding at the moment. See " + "https://issues.apache.org/jira/browse/HBASE-2155 for details."); throw new RuntimeException("-" + BIND_CONF_KEY + " not supported with " + implType); } if (implType == ImplType.HS_HA || implType == ImplType.NONBLOCKING || implType == ImplType.THREADED_SELECTOR) { InetAddress listenAddress = getBindAddress(conf); TNonblockingServerTransport serverTransport = new TNonblockingServerSocket( new InetSocketAddress(listenAddress, listenPort)); if (implType == ImplType.NONBLOCKING) { TNonblockingServer.Args serverArgs = new TNonblockingServer.Args(serverTransport); serverArgs.processor(processor).transportFactory(transportFactory).protocolFactory(protocolFactory); tserver = new TNonblockingServer(serverArgs); } else if (implType == ImplType.HS_HA) { THsHaServer.Args serverArgs = new THsHaServer.Args(serverTransport); CallQueue callQueue = new CallQueue(new LinkedBlockingQueue<Call>(), metrics); ExecutorService executorService = createExecutor(callQueue, serverArgs.getWorkerThreads()); serverArgs.executorService(executorService).processor(processor).transportFactory(transportFactory) .protocolFactory(protocolFactory); tserver = new THsHaServer(serverArgs); } else { // THREADED_SELECTOR TThreadedSelectorServer.Args serverArgs = new HThreadedSelectorServerArgs(serverTransport, conf); CallQueue callQueue = new CallQueue(new LinkedBlockingQueue<Call>(), metrics); ExecutorService executorService = createExecutor(callQueue, serverArgs.getWorkerThreads()); serverArgs.executorService(executorService).processor(processor).transportFactory(transportFactory) .protocolFactory(protocolFactory); tserver = new TThreadedSelectorServer(serverArgs); } LOG.info("starting HBase " + implType.simpleClassName() + " server on " + Integer.toString(listenPort)); } else if (implType == ImplType.THREAD_POOL) { // Thread pool server. Get the IP address to bind to. InetAddress listenAddress = getBindAddress(conf); TServerTransport serverTransport = new TServerSocket(new InetSocketAddress(listenAddress, listenPort)); TBoundedThreadPoolServer.Args serverArgs = new TBoundedThreadPoolServer.Args(serverTransport, conf); serverArgs.processor(processor).transportFactory(transportFactory).protocolFactory(protocolFactory); LOG.info("starting " + ImplType.THREAD_POOL.simpleClassName() + " on " + listenAddress + ":" + Integer.toString(listenPort) + "; " + serverArgs); TBoundedThreadPoolServer tserver = new TBoundedThreadPoolServer(serverArgs, metrics); this.tserver = tserver; } else { throw new AssertionError("Unsupported Thrift server implementation: " + implType.simpleClassName()); } // A sanity check that we instantiated the right type of server. if (tserver.getClass() != implType.serverClass) { throw new AssertionError("Expected to create Thrift server class " + implType.serverClass.getName() + " but got " + tserver.getClass().getName()); } registerFilters(conf); }