Repository: thrift Updated Branches: refs/heads/master fe50feae7 -> 70b33fb6b
THRIFT-4515: fix up nonblocking options and enable ssl for nonblocking in cpp server cross Client: cpp Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/70b33fb6 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/70b33fb6 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/70b33fb6 Branch: refs/heads/master Commit: 70b33fb6b48d62859a048cac1bec79cfadb2f310 Parents: fe50fea Author: James E. King III <jk...@apache.org> Authored: Sun Mar 11 10:57:10 2018 -0400 Committer: James E. King III <jk...@apache.org> Committed: Sun Mar 11 10:57:56 2018 -0400 ---------------------------------------------------------------------- test/cpp/src/TestServer.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/70b33fb6/test/cpp/src/TestServer.cpp ---------------------------------------------------------------------- diff --git a/test/cpp/src/TestServer.cpp b/test/cpp/src/TestServer.cpp index 78b0a74..6b4df7d 100644 --- a/test/cpp/src/TestServer.cpp +++ b/test/cpp/src/TestServer.cpp @@ -33,6 +33,7 @@ #include <thrift/server/TThreadedServer.h> #include <thrift/transport/THttpServer.h> #include <thrift/transport/THttpTransport.h> +#include <thrift/transport/TNonblockingSSLServerSocket.h> #include <thrift/transport/TNonblockingServerSocket.h> #include <thrift/transport/TSSLServerSocket.h> #include <thrift/transport/TSSLSocket.h> @@ -676,7 +677,9 @@ int main(int argc, char** argv) { sslSocketFactory->loadCertificate(certPath.c_str()); sslSocketFactory->loadPrivateKey(keyPath.c_str()); sslSocketFactory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - serverSocket = stdcxx::shared_ptr<TServerSocket>(new TSSLServerSocket(port, sslSocketFactory)); + if (server_type != "nonblocking") { + serverSocket = stdcxx::shared_ptr<TServerSocket>(new TSSLServerSocket(port, sslSocketFactory)); + } } else { if (domain_socket != "") { if (abstract_namespace) { @@ -738,13 +741,11 @@ int main(int argc, char** argv) { server.reset(new TSimpleServer(testProcessor, serverSocket, transportFactory, protocolFactory)); } else if (server_type == "thread-pool") { - stdcxx::shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(workers); - stdcxx::shared_ptr<PlatformThreadFactory> threadFactory = stdcxx::shared_ptr<PlatformThreadFactory>(new PlatformThreadFactory()); + stdcxx::shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(workers); threadManager->threadFactory(threadFactory); - threadManager->start(); server.reset(new TThreadPoolServer(testProcessor, @@ -753,7 +754,6 @@ int main(int argc, char** argv) { protocolFactory, threadManager)); } else if (server_type == "threaded") { - server.reset( new TThreadedServer(testProcessor, serverSocket, transportFactory, protocolFactory)); } else if (server_type == "nonblocking") { @@ -769,10 +769,15 @@ int main(int argc, char** argv) { // provide a stop method. TEvhttpServer nonblockingServer(testBufferProcessor, port); nonblockingServer.serve(); - } else { - stdcxx::shared_ptr<transport::TNonblockingServerSocket> nbSocket; - nbSocket.reset(new transport::TNonblockingServerSocket(port)); + } else if (transport_type == "framed") { + stdcxx::shared_ptr<transport::TNonblockingServerTransport> nbSocket; + nbSocket.reset( + ssl ? new transport::TNonblockingSSLServerSocket(port, sslSocketFactory) + : new transport::TNonblockingServerSocket(port)); server.reset(new TNonblockingServer(testProcessor, protocolFactory, nbSocket)); + } else { + cerr << "server-type nonblocking requires transport of http or framed" << endl; + exit(1); } } @@ -789,13 +794,11 @@ int main(int argc, char** argv) { = factory.newThread(serverThreadRunner); thread->start(); - // HACK: cross language test suite is unable to handle cin properly - // that's why we stay in a endless loop here + // THRIFT-4515: this needs to be improved while (1) { + sleep(1); // do something other than chew up CPU like crazy } - // FIXME: find another way to stop the server (e.g. a signal) - // cout<<"Press enter to stop the server."<<endl; - // cin.ignore(); //wait until a key is pressed + // NOTREACHED server->stop(); thread->join();