blob: ddda098b3cd19b6a1c57b159e0951c382516ddc3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
module stress_test_server;
import std.getopt;
import std.parallelism : totalCPUs;
import std.stdio;
import std.typetuple;
import thrift.codegen.processor;
import thrift.protocol.binary;
import thrift.server.base;
import thrift.server.transport.socket;
import thrift.transport.buffered;
import thrift.transport.memory;
import thrift.transport.socket;
import thrift.util.hashset;
import test_utils;
import thrift.test.stress.Service;
class ServiceHandler : Service {
void echoVoid() { return; }
byte echoByte(byte arg) { return arg; }
int echoI32(int arg) { return arg; }
long echoI64(long arg) { return arg; }
byte[] echoList(byte[] arg) { return arg; }
HashSet!byte echoSet(HashSet!byte arg) { return arg; }
byte[byte] echoMap(byte[byte] arg) { return arg; }
string echoString(string arg) {
if (arg != "hello") {
stderr.writefln(`Wrong string received: %s instead of "hello"`, arg);
throw new Exception("Wrong string received.");
}
return arg;
}
}
void main(string[] args) {
ushort port = 9091;
auto serverType = ServerType.threaded;
TransportType transportType;
size_t numIOThreads = 1;
size_t taskPoolSize = totalCPUs;
getopt(args, "port", &port, "server-type", &serverType,
"transport-type", &transportType, "task-pool-size", &taskPoolSize,
"num-io-threads", &numIOThreads);
alias TypeTuple!(TBufferedTransport, TMemoryBuffer) AvailableTransports;
auto processor = new TServiceProcessor!(Service,
staticMap!(TBinaryProtocol, AvailableTransports))(new ServiceHandler());
auto serverSocket = new TServerSocket(port);
auto transportFactory = createTransportFactory(transportType);
auto protocolFactory = new TBinaryProtocolFactory!AvailableTransports;
auto server = createServer(serverType, taskPoolSize, numIOThreads,
processor, serverSocket, transportFactory, protocolFactory);
writefln("Starting %s %s StressTest server on port %s...", transportType,
serverType, port);
server.serve();
writeln("done.");
}