From 1303ec7b53b9a6916b0cb3ac8dfe8ddcef0f6736 Mon Sep 17 00:00:00 2001 From: Moiz Haidry Date: Mon, 5 Nov 2018 16:09:34 -0800 Subject: Added benchmarks for Callback based Unary server --- test/cpp/qps/BUILD | 1 + test/cpp/qps/qps_worker.cc | 2 + test/cpp/qps/server.h | 1 + test/cpp/qps/server_callback.cc | 96 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 test/cpp/qps/server_callback.cc (limited to 'test/cpp/qps') diff --git a/test/cpp/qps/BUILD b/test/cpp/qps/BUILD index 2ef7441371..26f43284a6 100644 --- a/test/cpp/qps/BUILD +++ b/test/cpp/qps/BUILD @@ -36,6 +36,7 @@ grpc_cc_library( "qps_server_builder.cc", "qps_worker.cc", "server_async.cc", + "server_callback.cc", "server_sync.cc", ], hdrs = [ diff --git a/test/cpp/qps/qps_worker.cc b/test/cpp/qps/qps_worker.cc index d97d95d8f3..23fe72316a 100644 --- a/test/cpp/qps/qps_worker.cc +++ b/test/cpp/qps/qps_worker.cc @@ -79,6 +79,8 @@ static std::unique_ptr CreateServer(const ServerConfig& config) { return CreateAsyncServer(config); case ServerType::ASYNC_GENERIC_SERVER: return CreateAsyncGenericServer(config); + case ServerType::CALLBACK_SERVER: + return CreateCallbackServer(config); default: abort(); } diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h index 6b1ef93617..89b0e3af4b 100644 --- a/test/cpp/qps/server.h +++ b/test/cpp/qps/server.h @@ -152,6 +152,7 @@ class Server { std::unique_ptr CreateSynchronousServer(const ServerConfig& config); std::unique_ptr CreateAsyncServer(const ServerConfig& config); std::unique_ptr CreateAsyncGenericServer(const ServerConfig& config); +std::unique_ptr CreateCallbackServer(const ServerConfig& config); } // namespace testing } // namespace grpc diff --git a/test/cpp/qps/server_callback.cc b/test/cpp/qps/server_callback.cc new file mode 100644 index 0000000000..8bedd44739 --- /dev/null +++ b/test/cpp/qps/server_callback.cc @@ -0,0 +1,96 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ +#include +#include +#include +#include +#include + +#include "src/core/lib/gpr/host_port.h" +#include "src/proto/grpc/testing/benchmark_service.grpc.pb.h" +#include "test/cpp/qps/qps_server_builder.h" +#include "test/cpp/qps/server.h" +#include "test/cpp/qps/usage_timer.h" + +namespace grpc { +namespace testing { + +class BenchmarkCallbackServiceImpl final + : public BenchmarkService::ExperimentalCallbackService { + public: + void UnaryCall( + ServerContext* context, const SimpleRequest* request, + SimpleResponse* response, + experimental::ServerCallbackRpcController* controller) override { + auto s = SetResponse(request, response); + controller->Finish(s); + } + + private: + static Status SetResponse(const SimpleRequest* request, + SimpleResponse* response) { + if (request->response_size() > 0) { + if (!Server::SetPayload(request->response_type(), + request->response_size(), + response->mutable_payload())) { + return Status(grpc::StatusCode::INTERNAL, "Error creating payload."); + } + } + return Status::OK; + } +}; + +class CallbackServer final : public grpc::testing::Server { + public: + explicit CallbackServer(const ServerConfig& config) : Server(config) { + std::unique_ptr builder = CreateQpsServerBuilder(); + + auto port_num = port(); + // Negative port number means inproc server, so no listen port needed + if (port_num >= 0) { + char* server_address = nullptr; + gpr_join_host_port(&server_address, "::", port_num); + builder->AddListeningPort(server_address, + Server::CreateServerCredentials(config)); + gpr_free(server_address); + } + + ApplyConfigToBuilder(config, builder.get()); + + builder->RegisterService(&service_); + + impl_ = builder->BuildAndStart(); + } + + std::shared_ptr InProcessChannel( + const ChannelArguments& args) override { + return impl_->InProcessChannel(args); + } + + private: + BenchmarkCallbackServiceImpl service_; + std::unique_ptr impl_; +}; + +std::unique_ptr CreateCallbackServer( + const ServerConfig& config) { + return std::unique_ptr(new CallbackServer(config)); +} + +} // namespace testing +} // namespace grpc -- cgit v1.2.3