22 std::vector<ccf::kv::Version> views;
27 void initialise(
const std::vector<ccf::kv::Version>& terms_)
30 for (
size_t i = 0; i < terms_.size(); ++i)
34 LOG_DEBUG_FMT(
"Initialised views: {}", fmt::join(views,
", "));
39 LOG_DEBUG_FMT(
"Updating view to: {} at version: {}", view, idx);
42 const auto current_latest_index = views.back();
43 if (idx < current_latest_index)
45 throw std::logic_error(fmt::format(
46 "version must not move backwards ({} < {})",
48 current_latest_index));
52 for (
ccf::View i = views.size(); i < view; ++i)
61 auto it = upper_bound(views.begin(), views.end(), idx);
64 if (it == views.begin())
69 return (it - views.begin());
76 return ccf::kv::NoVersion;
81 const auto tentative = views[view - 1];
82 if (view + 1 <= views.size() && views[view] == tentative)
84 return ccf::kv::NoVersion;
95 return ccf::kv::NoVersion;
100 return ccf::kv::NoVersion;
105 return views[view] - 1;
111 return {views.begin(), std::upper_bound(views.begin(), views.end(), idx)};
117 if (view > views.size())
121 return {views.begin() + view - 1, views.end()};
126 auto it = upper_bound(views.begin(), views.end(), idx);
127 views.erase(it, views.end());
129 "Resulting views from rollback: {}", fmt::join(views,
", "));
138 verifier(
ccf::crypto::make_unique_verifier(cert_))
205 retirement_committable_idx,
206 retired_committed_idx);
ccf::NodeId get_id() const
Definition state.h:141
Replica(const ccf::NodeId &id_, const std::vector< uint8_t > &cert_)
Definition state.h:136
void update(ccf::kv::Version idx, ccf::View view)
Definition state.h:37
void rollback(ccf::kv::Version idx)
Definition state.h:124
std::vector< ccf::kv::Version > get_history_until(ccf::kv::Version idx=std::numeric_limits< ccf::kv::Version >::max())
Definition state.h:108
static constexpr ccf::View InvalidView
Definition state.h:25
ccf::kv::Version end_of_view(ccf::View view)
Definition state.h:89
void initialise(const std::vector< ccf::kv::Version > &terms_)
Definition state.h:27
ccf::kv::Version start_of_view(ccf::View view)
Definition state.h:72
std::vector< ccf::kv::Version > get_history_since(uint64_t view)
Definition state.h:115
ccf::View view_at(ccf::kv::Version idx)
Definition state.h:59
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:714
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:690
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:786
#define LOG_DEBUG_FMT
Definition logger.h:357
std::unique_ptr< Verifier > VerifierUniquePtr
Definition verifier.h:229
uint64_t Version
Definition version.h:8
LeadershipState
Definition kv_types.h:140
MembershipState
Definition kv_types.h:155
std::mutex Mutex
Definition locking.h:12
Definition app_interface.h:14
constexpr View VIEW_UNKNOWN
Definition tx_id.h:26
uint64_t View
Definition tx_id.h:23
ccf::NodeId node_id
Definition state.h:158
ccf::kv::Version last_idx
Definition state.h:160
ccf::pal::Mutex lock
Definition state.h:156
std::optional< ccf::SeqNo > retirement_idx
Definition state.h:185
ccf::kv::LeadershipState leadership_state
Definition state.h:179
State(const ccf::NodeId &node_id_)
Definition state.h:153
std::optional< ccf::kv::RetirementPhase > retirement_phase
Definition state.h:183
std::optional< ccf::SeqNo > retired_committed_idx
Definition state.h:190
ccf::View current_view
Definition state.h:159
std::deque< Index > committable_indices
Definition state.h:165
ccf::kv::MembershipState membership_state
Definition state.h:180
ccf::kv::Version commit_idx
Definition state.h:161
ViewHistory view_history
Definition state.h:162
std::optional< ccf::SeqNo > retirement_committable_idx
Definition state.h:187