List of usage examples for org.apache.thrift TProcessor TProcessor
TProcessor
From source file:com.facebook.nifty.processor.NiftyProcessorAdapters.java
License:Apache License
/** * Adapt a {@link NiftyProcessor} to a standard Thrift {@link TProcessor}. The {@link * com.facebook.nifty.core.NiftyRequestContext} will always be {@code null} *//*from ww w. j a v a 2 s .c om*/ public static TProcessor processorToTProcessor(final NiftyProcessor niftyProcessor) { return new TProcessor() { @Override public boolean process(TProtocol in, TProtocol out) throws TException { try { return niftyProcessor.process(in, out, null).get(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new TException(e); } catch (ExecutionException e) { throw new TException(e); } } }; }
From source file:com.si.jupiter.smart.processor.SmartProcessorAdapters.java
License:Apache License
/** * thriftTProcessor?? SmartProcessor ? thrift ?? ,?SmartRequestContextnull * @param niftyProcessor//w w w . j ava 2s . c o m * @return */ public static TProcessor processorToTProcessor(final SmartProcessor niftyProcessor) { return new TProcessor() { public boolean process(TProtocol in, TProtocol out) throws TException { try { return niftyProcessor.process(in, out, null).get(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new TException(e); } catch (ExecutionException e) { throw new TException(e); } } }; }
From source file:org.apache.hadoop.hbase.thrift.ThriftServerRunner.java
License:Apache License
/** * Setting up the thrift TServer/* www . jav a2s . c o 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); }
From source file:org.apache.hadoop.hbase.thrift2.ThriftServer.java
License:Apache License
/** * Start up the Thrift2 server./*w w w . ja v a 2s . c om*/ * * @param args */ public static void main(String[] args) throws Exception { TServer server = null; Options options = getOptions(); Configuration conf = HBaseConfiguration.create(); CommandLine cmd = parseArguments(conf, options, args); /** * This is to please both bin/hbase and bin/hbase-daemon. hbase-daemon provides "start" and "stop" arguments hbase * should print the help if no argument is provided */ List<?> argList = cmd.getArgList(); if (cmd.hasOption("help") || !argList.contains("start") || argList.contains("stop")) { printUsage(); System.exit(1); } // Get address to bind String bindAddress; if (cmd.hasOption("bind")) { bindAddress = cmd.getOptionValue("bind"); conf.set("hbase.thrift.info.bindAddress", bindAddress); } else { bindAddress = conf.get("hbase.thrift.info.bindAddress"); } // Get port to bind to int listenPort = 0; try { if (cmd.hasOption("port")) { listenPort = Integer.parseInt(cmd.getOptionValue("port")); } else { listenPort = conf.getInt("hbase.regionserver.thrift.port", DEFAULT_LISTEN_PORT); } } catch (NumberFormatException e) { throw new RuntimeException("Could not parse the value provided for the port option", e); } // Local hostname and user name, // used only if QOP is configured. String host = null; String name = null; UserProvider userProvider = UserProvider.instantiate(conf); // login the server principal (if using secure Hadoop) boolean securityEnabled = userProvider.isHadoopSecurityEnabled() && userProvider.isHBaseSecurityEnabled(); if (securityEnabled) { host = Strings.domainNamePointerToHostName( DNS.getDefaultHost(conf.get("hbase.thrift.dns.interface", "default"), conf.get("hbase.thrift.dns.nameserver", "default"))); userProvider.login("hbase.thrift.keytab.file", "hbase.thrift.kerberos.principal", host); } UserGroupInformation realUser = userProvider.getCurrent().getUGI(); String qop = conf.get(THRIFT_QOP_KEY); if (qop != null) { if (!qop.equals("auth") && !qop.equals("auth-int") && !qop.equals("auth-conf")) { throw new IOException("Invalid " + THRIFT_QOP_KEY + ": " + qop + ", it must be 'auth', 'auth-int', or 'auth-conf'"); } if (!securityEnabled) { throw new IOException("Thrift server must" + " run in secure mode to support authentication"); } // Extract the name from the principal name = SecurityUtil.getUserFromPrincipal(conf.get("hbase.thrift.kerberos.principal")); } boolean nonblocking = cmd.hasOption("nonblocking"); boolean hsha = cmd.hasOption("hsha"); ThriftMetrics metrics = new ThriftMetrics(conf, ThriftMetrics.ThriftServerType.TWO); String implType = "threadpool"; if (nonblocking) { implType = "nonblocking"; } else if (hsha) { implType = "hsha"; } conf.set("hbase.regionserver.thrift.server.type", implType); conf.setInt("hbase.regionserver.thrift.port", listenPort); registerFilters(conf); // Construct correct ProtocolFactory boolean compact = cmd.hasOption("compact") || conf.getBoolean("hbase.regionserver.thrift.compact", false); TProtocolFactory protocolFactory = getTProtocolFactory(compact); final ThriftHBaseServiceHandler hbaseHandler = new ThriftHBaseServiceHandler(conf, userProvider); THBaseService.Iface handler = ThriftHBaseServiceHandler.newInstance(hbaseHandler, metrics); final THBaseService.Processor p = new THBaseService.Processor(handler); conf.setBoolean("hbase.regionserver.thrift.compact", compact); TProcessor processor = p; boolean framed = cmd.hasOption("framed") || conf.getBoolean("hbase.regionserver.thrift.framed", false) || nonblocking || hsha; TTransportFactory transportFactory = getTTransportFactory(qop, name, host, framed, conf.getInt("hbase.regionserver.thrift.framed.max_frame_size_in_mb", 2) * 1024 * 1024); InetSocketAddress inetSocketAddress = bindToPort(bindAddress, listenPort); conf.setBoolean("hbase.regionserver.thrift.framed", framed); if (qop != null) { // 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); } }; } // check for user-defined info server port setting, if so override the conf try { if (cmd.hasOption("infoport")) { String val = cmd.getOptionValue("infoport"); conf.setInt("hbase.thrift.info.port", Integer.parseInt(val)); log.debug("Web UI port set to " + val); } } catch (NumberFormatException e) { log.error("Could not parse the value provided for the infoport option", e); printUsage(); System.exit(1); } // Put up info server. int port = conf.getInt("hbase.thrift.info.port", 9095); if (port >= 0) { conf.setLong("startcode", System.currentTimeMillis()); String a = conf.get("hbase.thrift.info.bindAddress", "0.0.0.0"); InfoServer infoServer = new InfoServer("thrift", a, port, false, conf); infoServer.setAttribute("hbase.conf", conf); infoServer.start(); } if (nonblocking) { server = getTNonBlockingServer(protocolFactory, processor, transportFactory, inetSocketAddress); } else if (hsha) { server = getTHsHaServer(protocolFactory, processor, transportFactory, inetSocketAddress, metrics); } else { server = getTThreadPoolServer(protocolFactory, processor, transportFactory, inetSocketAddress); } final TServer tserver = server; realUser.doAs(new PrivilegedAction<Object>() { @Override public Object run() { tserver.serve(); return null; } }); }