diff --git a/include/sisl/flip/flip.hpp b/include/sisl/flip/flip.hpp index d0caad81..84ef278f 100644 --- a/include/sisl/flip/flip.hpp +++ b/include/sisl/flip/flip.hpp @@ -438,10 +438,17 @@ class Flip { } void start_rpc_server() { - m_flip_server_thread = std::unique_ptr< std::thread >(new std::thread(FlipRPCServer::rpc_thread)); + m_flip_server = std::make_unique< FlipRPCServer >(); + m_flip_server_thread = + std::unique_ptr< std::thread >(new std::thread([this]() { m_flip_server->rpc_thread(); })); m_flip_server_thread->detach(); } + void stop_rpc_server() { + m_flip_server->shutdown(); + m_flip_server.reset(); + } + bool add(const FlipSpec& fspec) { m_flip_enabled = true; auto inst = flip_instance(fspec); @@ -667,6 +674,7 @@ class Flip { bool m_flip_enabled; std::unique_ptr< FlipTimerBase > m_timer; std::unique_ptr< std::thread > m_flip_server_thread; + std::unique_ptr< FlipRPCServer > m_flip_server; }; } // namespace flip diff --git a/include/sisl/flip/flip_rpc_server.hpp b/include/sisl/flip/flip_rpc_server.hpp index ede9cd0a..5a2ed466 100644 --- a/include/sisl/flip/flip_rpc_server.hpp +++ b/include/sisl/flip/flip_rpc_server.hpp @@ -15,6 +15,7 @@ * *********************************************************************************/ #pragma once +#include #include "proto/flip_spec.pb.h" #include "proto/flip_server.grpc.pb.h" @@ -22,11 +23,18 @@ namespace flip { class FlipRPCServer final : public FlipServer::Service { public: + FlipRPCServer() = default; grpc::Status InjectFault(grpc::ServerContext* context, const FlipSpec* request, FlipResponse* response) override; grpc::Status GetFaults(grpc::ServerContext* context, const FlipNameRequest* request, FlipListResponse* response) override; grpc::Status RemoveFault(grpc::ServerContext*, const FlipRemoveRequest* request, FlipRemoveResponse* response) override; - static void rpc_thread(); + void rpc_thread(); + void shutdown() { + if (m_server) { m_server->Shutdown(); } + } + +private: + std::unique_ptr< grpc::Server > m_server; }; } // namespace flip diff --git a/src/flip/lib/flip_rpc_server.cpp b/src/flip/lib/flip_rpc_server.cpp index 07cc20bc..bf131089 100644 --- a/src/flip/lib/flip_rpc_server.cpp +++ b/src/flip/lib/flip_rpc_server.cpp @@ -70,9 +70,9 @@ void FlipRPCServer::rpc_thread() { grpc::ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService((FlipRPCServer::Service*)&service); - std::unique_ptr< grpc::Server > server(builder.BuildAndStart()); + m_server = builder.BuildAndStart(); LOGINFOMOD(flip, "Flip GRPC Server listening on {}", server_address); - server->Wait(); + m_server->Wait(); } } // namespace flip