new(userspace/falco): register version gRPC service

Signed-off-by: Leonardo Di Donato <leodidonato@gmail.com>
This commit is contained in:
Leonardo Di Donato 2019-10-04 17:13:16 +00:00 committed by poiana
parent bc297bdc8f
commit c7aff2d4cb
5 changed files with 17 additions and 17 deletions

View File

@ -50,6 +50,7 @@ add_executable(
webserver.cpp
grpc_context.cpp
grpc_server_impl.cpp
grpc_request_context.cpp
grpc_server.cpp
utils.cpp
${CMAKE_CURRENT_BINARY_DIR}/version.grpc.pb.cc
@ -58,6 +59,8 @@ add_executable(
${CMAKE_CURRENT_BINARY_DIR}/output.pb.cc
${CMAKE_CURRENT_BINARY_DIR}/schema.pb.cc)
add_dependencies(falco civetweb)
if(USE_BUNDLED_DEPS)
add_dependencies(falco yamlcpp)
endif()

View File

@ -33,7 +33,7 @@ void request_stream_context<falco::output::service, falco::output::request, falc
m_stream_ctx.reset();
m_req.Clear();
auto cq = srv->m_completion_queue.get();
(srv->m_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
(srv->m_output_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
}
template<>
@ -86,22 +86,20 @@ void falco::grpc::request_context<falco::version::service, falco::version::reque
m_state = request_context_base::REQUEST;
m_srv_ctx.reset(new ::grpc::ServerContext);
auto srvctx = m_srv_ctx.get();
m_res_writer.reset(new ::grpc::ServerAsyncWriter<version::response>(srvctx));
m_res_writer.reset(new ::grpc::ServerAsyncResponseWriter<version::response>(srvctx));
m_req.Clear();
// auto cq = srv->m_completion_queue.get();
// fixme(leodido) > m_svc is output::service not version::service
// (srv->m_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
auto cq = srv->m_completion_queue.get();
(srv->m_version_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
}
template<>
void falco::grpc::request_context<falco::version::service, falco::version::request, falco::version::response>::process(server* srv)
{
version::response res;
(srv->*m_process_func)(m_srv_ctx.get(), m_req, res);
(srv->*m_process_func)(m_srv_ctx.get(), m_req, res); // version()
// Done
m_state = request_context_base::FINISH;
m_res_writer->Write(res, this);
m_res_writer->Finish(::grpc::Status::OK, this);
m_res_writer->Finish(res, ::grpc::Status::OK, this);
}
template<>

View File

@ -93,7 +93,7 @@ public:
void end(server* srv, bool isError);
private:
std::unique_ptr<::grpc::ServerAsyncWriter<Response>> m_res_writer;
std::unique_ptr<::grpc::ServerAsyncResponseWriter<Response>> m_res_writer;
Request m_req;
};
} // namespace grpc

View File

@ -117,8 +117,8 @@ void falco::grpc::server::run()
::grpc::ServerBuilder builder;
builder.AddListeningPort(m_server_addr, ::grpc::SslServerCredentials(ssl_opts));
builder.RegisterService(&m_svc);
// fixme(leodido) > register various services ...
builder.RegisterService(&m_output_svc);
builder.RegisterService(&m_version_svc);
m_completion_queue = builder.AddCompletionQueue();
m_server = builder.BuildAndStart();
@ -129,9 +129,10 @@ void falco::grpc::server::run()
// For this approach to be sufficient server::IMPL have to be fast
int context_num = m_threadiness * 10;
//REGISTER_UNARY(version::request, version::response, version::service, version, version, context_num)
REGISTER_UNARY(version::request, version::response, version::service, version, version, context_num)
REGISTER_STREAM(output::request, output::response, output::service, subscribe, subscribe, context_num)
// todo(leodido, fntlnz) > do we need to size thrediness to context_num * number of registered services here? eg., context_num * 2
m_threads.resize(m_threadiness);
int thread_idx = 0;
for(std::thread& thread : m_threads)

View File

@ -47,12 +47,10 @@ public:
void run();
void stop();
// fixme(leodido) > wny the output::service:: ..?
output::service::AsyncService m_svc;
std::unique_ptr<::grpc::ServerCompletionQueue> m_completion_queue;
output::service::AsyncService m_output_svc;
version::service::AsyncService m_version_svc;
// version::service::AsyncService m_version_svc;
// std::unique_ptr<::grpc::ServerCompletionQueue> m_version_completion_queue;
std::unique_ptr<::grpc::ServerCompletionQueue> m_completion_queue;
private:
std::string m_server_addr;