Merge pull request #18025 from soheilhy/callback-sync-cq

Reorder code to set num_frequently_polled_cqs correctly.
pull/17978/head^2
hcaseyal 6 years ago committed by GitHub
commit eecd983302
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 32
      src/cpp/server/server_builder.cc

@ -243,15 +243,25 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
sync_server_cqs(std::make_shared<
std::vector<std::unique_ptr<ServerCompletionQueue>>>());
int num_frequently_polled_cqs = 0;
bool has_frequently_polled_cqs = false;
for (auto it = cqs_.begin(); it != cqs_.end(); ++it) {
if ((*it)->IsFrequentlyPolled()) {
num_frequently_polled_cqs++;
has_frequently_polled_cqs = true;
break;
}
}
// == Determine if the server has any callback methods ==
bool has_callback_methods = false;
for (auto it = services_.begin(); it != services_.end(); ++it) {
if ((*it)->service->has_callback_methods()) {
has_callback_methods = true;
has_frequently_polled_cqs = true;
break;
}
}
const bool is_hybrid_server =
has_sync_methods && num_frequently_polled_cqs > 0;
const bool is_hybrid_server = has_sync_methods && has_frequently_polled_cqs;
if (has_sync_methods) {
grpc_cq_polling_type polling_type =
@ -264,15 +274,6 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
}
}
// == Determine if the server has any callback methods ==
bool has_callback_methods = false;
for (auto it = services_.begin(); it != services_.end(); ++it) {
if ((*it)->service->has_callback_methods()) {
has_callback_methods = true;
break;
}
}
// TODO(vjpai): Add a section here for plugins once they can support callback
// methods
@ -306,13 +307,12 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
for (auto it = sync_server_cqs->begin(); it != sync_server_cqs->end(); ++it) {
grpc_server_register_completion_queue(server->server_, (*it)->cq(),
nullptr);
num_frequently_polled_cqs++;
has_frequently_polled_cqs = true;
}
if (has_callback_methods) {
auto* cq = server->CallbackCQ();
grpc_server_register_completion_queue(server->server_, cq->cq(), nullptr);
num_frequently_polled_cqs++;
}
// cqs_ contains the completion queue added by calling the ServerBuilder's
@ -325,7 +325,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
nullptr);
}
if (num_frequently_polled_cqs == 0) {
if (!has_frequently_polled_cqs) {
gpr_log(GPR_ERROR,
"At least one of the completion queues must be frequently polled");
return nullptr;

Loading…
Cancel
Save