diff --git a/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs b/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs index 877d595e6c1..7a5254ae8e6 100644 --- a/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs +++ b/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs @@ -29,6 +29,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.Logging; +#pragma warning disable IDE0079 // remove unnecessary pragmas +#pragma warning disable IDE0063 // using can be simplified, we don't + namespace Thrift.Server { /// @@ -125,8 +128,7 @@ public TThreadPoolAsyncServer(ITProcessorFactory processorFactory, { if ((threadConfig.MaxWorkerThreads > 0) || (threadConfig.MaxIOThreads > 0)) { - int work, comm; - ThreadPool.GetMaxThreads(out work, out comm); + ThreadPool.GetMaxThreads(out int work, out int comm); if (threadConfig.MaxWorkerThreads > 0) work = threadConfig.MaxWorkerThreads; if (threadConfig.MaxIOThreads > 0) @@ -137,8 +139,7 @@ public TThreadPoolAsyncServer(ITProcessorFactory processorFactory, if ((threadConfig.MinWorkerThreads > 0) || (threadConfig.MinIOThreads > 0)) { - int work, comm; - ThreadPool.GetMinThreads(out work, out comm); + ThreadPool.GetMinThreads(out int work, out int comm); if (threadConfig.MinWorkerThreads > 0) work = threadConfig.MinWorkerThreads; if (threadConfig.MinIOThreads > 0) @@ -209,7 +210,7 @@ public override async Task ServeAsync(CancellationToken cancellationToken) } finally { - ServerCancellationToken = default(CancellationToken); + ServerCancellationToken = default; } } @@ -255,6 +256,7 @@ private void Execute(object threadContext) //actually arriving or the client may hang up without ever makeing a request. if (ServerEventHandler != null) ServerEventHandler.ProcessContextAsync(connectionContext, inputTransport, cancellationToken).Wait(); + //Process client request (blocks until transport is readable) if (!processor.ProcessAsync(inputProtocol, outputProtocol, cancellationToken).Result) break; diff --git a/test/netstd/Server/TestServer.cs b/test/netstd/Server/TestServer.cs index 895c3ffd5b3..471d6c82482 100644 --- a/test/netstd/Server/TestServer.cs +++ b/test/netstd/Server/TestServer.cs @@ -60,11 +60,19 @@ internal enum BufferChoice Framed } + internal enum ServerChoice + { + Simple, + ThreadPool + } + + internal class ServerParam { internal BufferChoice buffering = BufferChoice.None; internal ProtocolChoice protocol = ProtocolChoice.Binary; internal TransportChoice transport = TransportChoice.Socket; + internal ServerChoice server = ServerChoice.Simple; internal int port = 9090; internal string pipe = null; @@ -103,13 +111,17 @@ internal void Parse(List args) { protocol = ProtocolChoice.Json; } + else if (args[i] == "--server-type=simple") + { + server = ServerChoice.Simple; + } else if (args[i] == "--threaded" || args[i] == "--server-type=threaded") { throw new NotImplementedException(args[i]); } else if (args[i] == "--threadpool" || args[i] == "--server-type=threadpool") { - throw new NotImplementedException(args[i]); + server = ServerChoice.ThreadPool; } else if (args[i] == "--prototype" || args[i] == "--processor=prototype") { @@ -613,16 +625,23 @@ public static int Execute(List args) var testProcessor = new ThriftTest.AsyncProcessor(testHandler); var processorFactory = new TSingletonProcessorFactory(testProcessor); - TServer serverEngine = new TSimpleAsyncServer(processorFactory, trans, transFactory, transFactory, proto, proto, logger); + var poolconfig = new TThreadPoolAsyncServer.Configuration(); // use platform defaults + TServer serverEngine = param.server switch + { + ServerChoice.Simple => new TSimpleAsyncServer(processorFactory, trans, transFactory, transFactory, proto, proto, logger), + ServerChoice.ThreadPool => new TThreadPoolAsyncServer(processorFactory, trans, transFactory, transFactory, proto, proto, poolconfig, logger), + _ => new TSimpleAsyncServer(processorFactory, trans, transFactory, transFactory, proto, proto, logger) + }; //Server event handler var serverEvents = new MyServerEventHandler(); serverEngine.SetEventHandler(serverEvents); // Run it - var where = (!string.IsNullOrEmpty(param.pipe)) ? "on pipe " + param.pipe : "on port " + param.port; - Console.WriteLine("Starting the AsyncBaseServer " + where + - " with processor TPrototypeProcessorFactory prototype factory " + + var where = (!string.IsNullOrEmpty(param.pipe)) ? "pipe " + param.pipe : "port " + param.port; + Console.WriteLine("Running "+ serverEngine.GetType().Name + + " at "+ where + + " using "+ processorFactory.GetType().Name + " processor prototype factory " + (param.buffering == BufferChoice.Buffered ? " with buffered transport" : "") + (param.buffering == BufferChoice.Framed ? " with framed transport" : "") + (param.transport == TransportChoice.TlsSocket ? " with encryption" : "") +