6#ifndef OPENCBDC_TX_SRC_RAFT_RPC_SERVER_H_
7#define OPENCBDC_TX_SRC_RAFT_RPC_SERVER_H_
25 m_impl = std::move(impl);
27 [&](
buffer req, response_callback_type resp_cb) {
28 return request_handler(std::move(req), std::move(resp_cb));
35 std::shared_ptr<node> m_impl;
37 using response_callback_type =
40 auto request_handler(
buffer request_buf,
41 response_callback_type response_callback)
43 if(!m_impl->is_leader()) {
50 auto new_log = nuraft::buffer::alloc(request_buf.size());
51 nuraft::buffer_serializer bs(new_log);
52 bs.put_raw(request_buf.data(), request_buf.size());
54 auto success = m_impl->replicate(
56 [&, resp_cb = std::move(response_callback), req_buf = new_log](
58 nuraft::ptr<std::exception>& err) {
60 resp_cb(std::nullopt);
64 const auto res = r.get();
66 resp_cb(std::nullopt);
71 resp_pkt.append(res->data_begin(), res->size());
72 resp_cb(std::move(resp_pkt));
Buffer to store and retrieve byte data.
Generic RPC server for raft nodes for which the replicated state machine handles the request processi...
void register_raft_node(std::shared_ptr< node > impl)
Registers the raft node whose state machine handles RPC requests for this server.
Generic asynchronous RPC server.
std::function< void(std::optional< Response >)> response_callback_type
Response callback function type.
void register_handler_callback(callback_type callback)
Register a request handler callback function for processing requests, generating responses,...
nuraft::cmd_result< nuraft::ptr< nuraft::buffer > > result_type
A NuRaft state machine execution result.
@ buffer
A singular RLP value (byte array)