From 1ac6f4594e52040a6525b1e333c1beb4b2d48fcb Mon Sep 17 00:00:00 2001 From: yang-g Date: Fri, 15 Jan 2016 11:46:40 -0800 Subject: [PATCH] warn user when they forget register generic service --- include/grpc++/impl/service_type.h | 16 ++++++++++++---- src/cpp/server/server_builder.cc | 9 +++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/include/grpc++/impl/service_type.h b/include/grpc++/impl/service_type.h index 4925785fd47..27af88e16fa 100644 --- a/include/grpc++/impl/service_type.h +++ b/include/grpc++/impl/service_type.h @@ -82,6 +82,15 @@ class Service { return false; } + bool has_generic_methods() const { + for (auto it = methods_.begin(); it != methods_.end(); ++it) { + if ((*it)->get() == nullptr) { + return true; + } + } + return false; + } + protected: template void RequestAsyncUnary(int index, ServerContext* context, Message* request, @@ -122,16 +131,15 @@ class Service { void MarkMethodAsync(int index) { if (methods_[index].get() == nullptr) { - gpr_log(GPR_ERROR, "A method cannot be marked async and generic."); - abort(); + gpr_log(GPR_ERROR, "Method already marked generic."); + return; } methods_[index]->ResetHandler(); } void MarkMethodGeneric(int index) { if (methods_[index]->handler() == nullptr) { - gpr_log(GPR_ERROR, "A method cannot be marked async and generic."); - abort(); + gpr_log(GPR_ERROR, "Method already marked async."); } methods_[index].reset(); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 9d1b3d2a0de..a8c188e5a55 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -117,6 +117,15 @@ std::unique_ptr ServerBuilder::BuildAndStart() { } if (generic_service_) { server->RegisterAsyncGenericService(generic_service_); + } else { + for (auto it = services_.begin(); it != services_.end(); ++it) { + if ((*it)->service->has_generic_methods()) { + gpr_log(GPR_ERROR, + "Some methods were marked generic but there is no " + "generic service registered."); + return nullptr; + } + } } for (auto port = ports_.begin(); port != ports_.end(); port++) { int r = server->AddListeningPort(port->addr, port->creds.get());