21 std::vector<ccf::kv::Version> views;
26 void initialise(
const std::vector<ccf::kv::Version>& terms_)
29 for (
size_t i = 0; i < terms_.size(); ++i)
33 LOG_DEBUG_FMT(
"Initialised views: {}", fmt::join(views,
", "));
38 LOG_DEBUG_FMT(
"Updating view to: {} at version: {}", view, idx);
41 const auto current_latest_index = views.back();
42 if (idx < current_latest_index)
44 throw std::logic_error(fmt::format(
45 "version must not move backwards ({} < {})",
47 current_latest_index));
51 for (
ccf::View i = views.size(); i < view; ++i)
60 auto it = upper_bound(views.begin(), views.end(), idx);
63 if (it == views.begin())
68 return (it - views.begin());
75 return ccf::kv::NoVersion;
80 const auto tentative = views[view - 1];
81 if (view + 1 <= views.size() && views[view] == tentative)
83 return ccf::kv::NoVersion;
94 return ccf::kv::NoVersion;
99 return ccf::kv::NoVersion;
104 return views[view] - 1;
110 return {views.begin(), std::upper_bound(views.begin(), views.end(), idx)};
116 if (view > views.size())
120 return {views.begin() + view - 1, views.end()};
125 auto it = upper_bound(views.begin(), views.end(), idx);
126 views.erase(it, views.end());
128 "Resulting views from rollback: {}", fmt::join(views,
", "));
137 verifier(
ccf::crypto::make_unique_verifier(cert_))
210 retirement_committable_idx,
211 retired_committed_idx);
ccf::NodeId get_id() const
Definition state.h:140
Replica(ccf::NodeId id_, const std::vector< uint8_t > &cert_)
Definition state.h:135
void update(ccf::kv::Version idx, ccf::View view)
Definition state.h:36
void rollback(ccf::kv::Version idx)
Definition state.h:123
std::vector< ccf::kv::Version > get_history_until(ccf::kv::Version idx=std::numeric_limits< ccf::kv::Version >::max())
Definition state.h:107
static constexpr ccf::View InvalidView
Definition state.h:24
ccf::kv::Version end_of_view(ccf::View view)
Definition state.h:88
void initialise(const std::vector< ccf::kv::Version > &terms_)
Definition state.h:26
ccf::kv::Version start_of_view(ccf::View view)
Definition state.h:71
std::vector< ccf::kv::Version > get_history_since(uint64_t view)
Definition state.h:114
ccf::View view_at(ccf::kv::Version idx)
Definition state.h:58
#define LOG_DEBUG_FMT
Definition internal_logger.h:14
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:718
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:694
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:790
std::unique_ptr< Verifier > VerifierUniquePtr
Definition verifier.h:168
uint64_t Version
Definition version.h:8
MembershipState
Definition kv_types.h:122
LeadershipState
Definition kv_types.h:105
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:160
ccf::kv::Version last_idx
Definition state.h:162
bool pre_vote_enabled
Definition state.h:194
ccf::pal::Mutex lock
Definition state.h:158
std::optional< ccf::SeqNo > retirement_idx
Definition state.h:187
ccf::kv::LeadershipState leadership_state
Definition state.h:181
std::optional< ccf::kv::RetirementPhase > retirement_phase
Definition state.h:185
std::optional< ccf::SeqNo > retired_committed_idx
Definition state.h:192
ccf::View current_view
Definition state.h:161
State(ccf::NodeId node_id_, bool pre_vote_enabled_=true)
Definition state.h:152
std::deque< Index > committable_indices
Definition state.h:167
ccf::kv::MembershipState membership_state
Definition state.h:182
ccf::kv::Version commit_idx
Definition state.h:163
ViewHistory view_history
Definition state.h:164
std::optional< ccf::SeqNo > retirement_committable_idx
Definition state.h:189