From b7f14fdab8c6da31b8009a4b4dc395a913660493 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Wed, 6 Mar 2019 23:43:34 -0800 Subject: [PATCH] Properly implement unimplemented RPCs at callback-only server --- include/grpcpp/server.h | 4 ++++ src/cpp/server/server_cc.cc | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/include/grpcpp/server.h b/include/grpcpp/server.h index 21c908aebdb..f5c99f22df2 100644 --- a/include/grpcpp/server.h +++ b/include/grpcpp/server.h @@ -326,6 +326,10 @@ class Server : public ServerInterface, private GrpcLibraryCodegen { std::unique_ptr health_check_service_; bool health_check_service_disabled_; + // When appropriate, use a default callback generic service to handle + // unimplemented methods + std::unique_ptr unimplemented_service_; + // A special handler for resource exhausted in sync case std::unique_ptr resource_exhausted_handler_; diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc index 6e78e93b835..26e84f1aed4 100644 --- a/src/cpp/server/server_cc.cc +++ b/src/cpp/server/server_cc.cc @@ -1004,6 +1004,14 @@ void Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) { RegisterService(nullptr, default_health_check_service_impl); } + // If this server uses callback methods, then create a callback generic + // service to handle any unimplemented methods using the default reactor + // creator + if (!callback_reqs_to_start_.empty() && !has_callback_generic_service_) { + unimplemented_service_.reset(new experimental::CallbackGenericService); + RegisterCallbackGenericService(unimplemented_service_.get()); + } + grpc_server_start(server_); if (!has_async_generic_service_ && !has_callback_generic_service_) {