OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
parsec/ticket_machine/state_machine.hpp
Go to the documentation of this file.
1// Copyright (c) 2021 MIT Digital Currency Initiative,
2// Federal Reserve Bank of Boston
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef OPENCBDC_TX_SRC_PARSEC_TICKET_MACHINE_STATE_MACHINE_H_
7#define OPENCBDC_TX_SRC_PARSEC_TICKET_MACHINE_STATE_MACHINE_H_
8
9#include "impl.hpp"
10#include "messages.hpp"
13
14#include <libnuraft/nuraft.hxx>
15
19 : public nuraft::state_machine,
20 public cbdc::rpc::blocking_server<rpc::request,
21 rpc::response,
22 nuraft::buffer&,
23 nuraft::ptr<nuraft::buffer>> {
24 public:
28 state_machine(std::shared_ptr<logging::log> logger,
29 ticket_number_type batch_size);
30
37 auto commit(uint64_t log_idx, nuraft::buffer& data)
38 -> nuraft::ptr<nuraft::buffer> override;
39
42 auto apply_snapshot(nuraft::snapshot& /* s */) -> bool override;
43
46 auto last_snapshot() -> nuraft::ptr<nuraft::snapshot> override;
47
50 auto last_commit_index() -> uint64_t override;
51
53 void create_snapshot(
54 nuraft::snapshot& /* s */,
55 nuraft::async_result<bool>::handler_type& /* when_done */)
56 override;
57
58 private:
59 auto process_request(rpc::request req) -> rpc::response;
60
61 std::atomic<uint64_t> m_last_committed_idx{0};
62
63 std::unique_ptr<impl> m_ticket_machine{};
64
65 std::shared_ptr<logging::log> m_logger;
66 };
67}
68
69#endif
NuRaft state machine implementation for a replicated ticket machine.
auto commit(uint64_t log_idx, nuraft::buffer &data) -> nuraft::ptr< nuraft::buffer > override
Commit the given raft log entry at the given log index, and return the result.
void create_snapshot(nuraft::snapshot &, nuraft::async_result< bool >::handler_type &) override
Not implemented for ticket machine.
auto apply_snapshot(nuraft::snapshot &) -> bool override
Not implemented for ticket machine.
state_machine(std::shared_ptr< logging::log > logger, ticket_number_type batch_size)
Constructor.
auto last_commit_index() -> uint64_t override
Returns the most recently committed log entry index.
auto last_snapshot() -> nuraft::ptr< nuraft::snapshot > override
Not implemented for ticket machine.
Generic synchronous RPC server.
std::variant< std::monostate > request
Ticket machine RPC request type.
interface::get_ticket_number_return_type response
Ticket machine RPC response type.
uint64_t ticket_number_type
Type alias for a ticket number.