diff options
author | Moiz Haidry <mhaidry@google.com> | 2018-11-05 16:09:34 -0800 |
---|---|---|
committer | Moiz Haidry <mhaidry@google.com> | 2018-11-07 10:08:51 -0800 |
commit | 1303ec7b53b9a6916b0cb3ac8dfe8ddcef0f6736 (patch) | |
tree | 8b03f4cd787c65b42e98c4c6fc1159dc39cbfbba /test/cpp/qps | |
parent | 7a08e3b679e5a63f30fda6b426d57146f9984092 (diff) |
Added benchmarks for Callback based Unary server
Diffstat (limited to 'test/cpp/qps')
-rw-r--r-- | test/cpp/qps/BUILD | 1 | ||||
-rw-r--r-- | test/cpp/qps/qps_worker.cc | 2 | ||||
-rw-r--r-- | test/cpp/qps/server.h | 1 | ||||
-rw-r--r-- | test/cpp/qps/server_callback.cc | 96 |
4 files changed, 100 insertions, 0 deletions
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<Server> 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<Server> CreateSynchronousServer(const ServerConfig& config); std::unique_ptr<Server> CreateAsyncServer(const ServerConfig& config); std::unique_ptr<Server> CreateAsyncGenericServer(const ServerConfig& config); +std::unique_ptr<Server> 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 <grpc/grpc.h> +#include <grpc/support/alloc.h> +#include <grpcpp/security/server_credentials.h> +#include <grpcpp/server.h> +#include <grpcpp/server_context.h> + +#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<ServerBuilder> 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<Channel> InProcessChannel( + const ChannelArguments& args) override { + return impl_->InProcessChannel(args); + } + + private: + BenchmarkCallbackServiceImpl service_; + std::unique_ptr<grpc::Server> impl_; +}; + +std::unique_ptr<grpc::testing::Server> CreateCallbackServer( + const ServerConfig& config) { + return std::unique_ptr<Server>(new CallbackServer(config)); +} + +} // namespace testing +} // namespace grpc |