OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
parsec/runtime_locking_shard/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_RUNTIME_LOCKING_SHARD_STATE_MACHINE_H_
7#define OPENCBDC_TX_SRC_PARSEC_RUNTIME_LOCKING_SHARD_STATE_MACHINE_H_
8
9#include "messages.hpp"
10#include "replicated_shard.hpp"
12
13#include <libnuraft/nuraft.hxx>
14
17 class state_machine : public nuraft::state_machine {
18 public:
25 auto commit(uint64_t log_idx, nuraft::buffer& data)
26 -> nuraft::ptr<nuraft::buffer> override;
27
30 auto apply_snapshot(nuraft::snapshot& /* s */) -> bool override;
31
34 auto last_snapshot() -> nuraft::ptr<nuraft::snapshot> override;
35
38 auto last_commit_index() -> uint64_t override;
39
41 void create_snapshot(
42 nuraft::snapshot& /* s */,
43 nuraft::async_result<bool>::handler_type& /* when_done */)
44 override;
45
49 [[nodiscard]] auto get_shard() const
50 -> std::shared_ptr<replicated_shard>;
51
52 private:
53 auto process_request(const rpc::replicated_request& req)
55
56 std::atomic<uint64_t> m_last_committed_idx{0};
57
58 std::shared_ptr<replicated_shard> m_shard{
59 std::make_shared<replicated_shard>()};
60 };
61}
62
63#endif
NuRaft state machine implementation for a runtime locking shard.
auto apply_snapshot(nuraft::snapshot &) -> bool override
Not implemented for runtime locking shard.
auto last_snapshot() -> nuraft::ptr< nuraft::snapshot > override
Not implemented for runtime locking shard.
void create_snapshot(nuraft::snapshot &, nuraft::async_result< bool >::handler_type &) override
Not implemented for runtime locking shard.
auto get_shard() const -> std::shared_ptr< replicated_shard >
Returns the replicated shard implementation managed by the state machine.
auto last_commit_index() -> uint64_t override
Returns the most recently committed log entry index.
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.
std::variant< replicated_prepare_request, commit_request, finish_request, replicated_get_tickets_request > replicated_request
Shard replicated state machine request type.
std::variant< replicated_shard_interface::return_type, replicated_shard_interface::get_tickets_return_type > replicated_response
Shard replicated state machine response type.