From 0ba41907a25bd2433a433b82269817ea9ab8ec2d Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla <sreek@google.com> Date: Tue, 19 Jul 2016 09:28:39 -0700 Subject: [PATCH] Minor changes to GrpcRpcManager --- src/cpp/rpcmanager/grpc_rpc_manager.cc | 9 +++++---- src/cpp/rpcmanager/grpc_rpc_manager.h | 8 ++++---- test/cpp/rpcmanager/grpc_rpc_manager_test.cc | 9 +++++---- test/cpp/rpcmanager/grpc_rpc_manager_test.h | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.cc b/src/cpp/rpcmanager/grpc_rpc_manager.cc index 5bfd4eedad..1c7d5adeaf 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.cc +++ b/src/cpp/rpcmanager/grpc_rpc_manager.cc @@ -83,7 +83,7 @@ void GrpcRpcManager::Wait() { } // For testing only -void GrpcRpcManager::Shutdown() { +void GrpcRpcManager::ShutdownRpcManager() { std::unique_lock<grpc::mutex> lock(mu_); shutdown_ = true; } @@ -131,9 +131,10 @@ void GrpcRpcManager::MaybeCreatePoller() { void GrpcRpcManager::MainWorkLoop() { bool is_work_found = false; + void *tag; do { - PollForWork(is_work_found); + PollForWork(is_work_found, &tag); // Decrement num_pollers since this thread is no longer polling { @@ -146,7 +147,7 @@ void GrpcRpcManager::MainWorkLoop() { MaybeCreatePoller(); // Do actual work - DoWork(); + DoWork(tag); } // Continue to loop if this thread can continue as a poller @@ -158,7 +159,7 @@ void GrpcRpcManager::MainWorkLoop() { grpc::unique_lock<grpc::mutex> lock(mu_); num_threads_--; if (num_threads_ == 0) { - shutdown_cv_.notify_one(); + shutdown_cv_.notify_all(); } } diff --git a/src/cpp/rpcmanager/grpc_rpc_manager.h b/src/cpp/rpcmanager/grpc_rpc_manager.h index 5f89c1599d..a8cc6eb80f 100644 --- a/src/cpp/rpcmanager/grpc_rpc_manager.h +++ b/src/cpp/rpcmanager/grpc_rpc_manager.h @@ -50,12 +50,12 @@ class GrpcRpcManager { // This function MUST be called before using the object void Initialize(); - virtual void PollForWork(bool& is_work_found) = 0; - virtual void DoWork() = 0; + virtual void PollForWork(bool& is_work_found, void **tag) = 0; + virtual void DoWork(void *tag) = 0; - // Use this for testing purposes only + // Use the following two functions for testing purposes only void Wait(); - void Shutdown(); + void ShutdownRpcManager(); private: // Helper wrapper class around std::thread. This takes a GrpcRpcManager object diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc index b2e601d95e..2a306e48ad 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.cc +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.cc @@ -45,14 +45,15 @@ using grpc::testing::GrpcRpcManagerTest; // TODO: sreek - Rewrite this test. Find a better test case -void GrpcRpcManagerTest::PollForWork(bool& is_work_found) { +void GrpcRpcManagerTest::PollForWork(bool& is_work_found, void **tag) { { std::unique_lock<grpc::mutex> lock(mu_); std::cout << "Poll: " << std::this_thread::get_id() << std::endl; } is_work_found = true; + *tag = NULL; - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + std::this_thread::sleep_for(std::chrono::milliseconds(10)); { std::unique_lock<grpc::mutex> lock(mu_); @@ -60,12 +61,12 @@ void GrpcRpcManagerTest::PollForWork(bool& is_work_found) { if (num_calls_ > 50) { std::cout << "poll: False" << std::endl; is_work_found = false; - Shutdown(); + ShutdownRpcManager(); } } } -void GrpcRpcManagerTest::DoWork() { +void GrpcRpcManagerTest::DoWork(void *tag) { { std::unique_lock<grpc::mutex> lock(mu_); std::cout << "Work: " << std::this_thread::get_id() << std::endl; diff --git a/test/cpp/rpcmanager/grpc_rpc_manager_test.h b/test/cpp/rpcmanager/grpc_rpc_manager_test.h index 5073abd8f1..42e3549ed1 100644 --- a/test/cpp/rpcmanager/grpc_rpc_manager_test.h +++ b/test/cpp/rpcmanager/grpc_rpc_manager_test.h @@ -43,8 +43,8 @@ class GrpcRpcManagerTest GRPC_FINAL : public GrpcRpcManager { GrpcRpcManagerTest(int min_pollers, int max_pollers, int max_threads) : GrpcRpcManager(min_pollers, max_pollers, max_threads), num_calls_(0){}; - void PollForWork(bool &is_work_found) GRPC_OVERRIDE; - void DoWork() GRPC_OVERRIDE; + void PollForWork(bool &is_work_found, void **tag) GRPC_OVERRIDE; + void DoWork(void *tag) GRPC_OVERRIDE; private: grpc::mutex mu_; -- GitLab