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)};
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,
", "));
193 retirement_committable_idx,
194 retired_committed_idx);
void update(ccf::kv::Version idx, ccf::View view)
Definition state.h:36
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()) const
Definition state.h:107
ccf::kv::Version end_of_view(ccf::View view) const
Definition state.h:88
ccf::kv::Version start_of_view(ccf::View view) const
Definition state.h:71
static constexpr ccf::View InvalidView
Definition state.h:24
void initialise(const std::vector< ccf::kv::Version > &terms_)
Definition state.h:26
std::vector< ccf::kv::Version > get_history_since(uint64_t view) const
Definition state.h:114
ccf::View view_at(ccf::kv::Version idx) const
Definition state.h:58
#define LOG_DEBUG_FMT
Definition internal_logger.h:14
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:736
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:712
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:811
uint64_t Version
Definition version.h:10
MembershipState
Definition kv_types.h:125
LeadershipState
Definition kv_types.h:108
std::mutex Mutex
Definition locking.h:12
constexpr View VIEW_UNKNOWN
Definition tx_id.h:26
uint64_t View
Definition tx_id.h:23
ccf::NodeId node_id
Definition state.h:143
ccf::kv::Version last_idx
Definition state.h:145
bool pre_vote_enabled
Definition state.h:177
ccf::pal::Mutex lock
Definition state.h:141
std::optional< ccf::SeqNo > retirement_idx
Definition state.h:170
ccf::kv::LeadershipState leadership_state
Definition state.h:164
std::optional< ccf::kv::RetirementPhase > retirement_phase
Definition state.h:168
std::optional< ccf::SeqNo > retired_committed_idx
Definition state.h:175
ccf::View current_view
Definition state.h:144
State(ccf::NodeId node_id_, bool pre_vote_enabled_=true)
Definition state.h:135
std::deque< Index > committable_indices
Definition state.h:150
ccf::kv::MembershipState membership_state
Definition state.h:165
ccf::kv::Version commit_idx
Definition state.h:146
ViewHistory view_history
Definition state.h:147
std::optional< ccf::SeqNo > retirement_committable_idx
Definition state.h:172