MySQL 8.0.41
Source Code Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Gcs_xcom_expels_in_progress Class Reference

The set of expels we have issued but that have not yet taken effect. More...

#include <gcs_xcom_expels_in_progress.h>

Public Member Functions

 Gcs_xcom_expels_in_progress ()=default
 
 Gcs_xcom_expels_in_progress (Gcs_xcom_expels_in_progress const &)=default
 
 Gcs_xcom_expels_in_progress (Gcs_xcom_expels_in_progress &&)=default
 
Gcs_xcom_expels_in_progressoperator= (Gcs_xcom_expels_in_progress const &)=default
 
Gcs_xcom_expels_in_progressoperator= (Gcs_xcom_expels_in_progress &&)=default
 
void remember_expels_issued (synode_no const config_id_where_expels_were_issued, Gcs_xcom_nodes const &expels_issued)
 Keep track of members we expelled expels_issued together with the XCom configuration config_id_where_expels_were_issued that triggered the expel. More...
 
void forget_expels_that_have_taken_effect (synode_no const config_id_where_members_under_effect, std::vector< Gcs_member_identifier * > const &members_under_effect)
 Forget about any expel we issued for the members that have taken effect in the XCom configuration identified by config_id_where_members_under_effect. More...
 
std::size_t number_of_expels_not_about_suspects (std::vector< Gcs_member_identifier * > const &suspected_members, std::vector< Gcs_member_identifier * > const &suspected_nonmembers) const
 How many of the expels in progress do not pertain to suspected nodes. More...
 
bool all_still_in_view (Gcs_xcom_nodes const &xcom_nodes) const
 Whether all expels in progress are for members in xcom_nodes. More...
 
std::size_t size () const
 How many expels are in progress. More...
 
bool contains (Gcs_member_identifier const &member, synode_no const synode) const
 Whether there is an expel in progress for member issued during the XCom configuration identified by synode. More...
 
bool contains (Gcs_member_identifier const &member) const
 Whether there is an expel in progress for member issued. More...
 

Private Attributes

std::vector< std::pair< Gcs_member_identifier, synode_no > > m_expels_in_progress
 

Detailed Description

The set of expels we have issued but that have not yet taken effect.

An expel is identified as the pair (m, c), which means that we expelled the member m based on view(s) pertaining to the XCom configuration/membership c.

Whenever we issue the expel of some member m, we take note in this structure; see remember_expels_issued.

Whenever we process a view where some member m that we have expelled is no longer present, we remove m from this structure; see forget_expels_that_have_taken_effect.

Please note that we keep track of the configuration ID c where we expelled m to guard against the possibility of removing m from this structure due to receiving a view "from the past," e.g. receiving a view from configuration b < c where m is not a member, after having expelled m due to views from configuration c. It is unclear whether XCom can sometimes deliver views "from the past," so we account for this situation by only removing m from this structure if we receive a view from a configuration d > c where m is no longer present.

Constructor & Destructor Documentation

◆ Gcs_xcom_expels_in_progress() [1/3]

Gcs_xcom_expels_in_progress::Gcs_xcom_expels_in_progress ( )
default

◆ Gcs_xcom_expels_in_progress() [2/3]

Gcs_xcom_expels_in_progress::Gcs_xcom_expels_in_progress ( Gcs_xcom_expels_in_progress const &  )
default

◆ Gcs_xcom_expels_in_progress() [3/3]

Gcs_xcom_expels_in_progress::Gcs_xcom_expels_in_progress ( Gcs_xcom_expels_in_progress &&  )
default

Member Function Documentation

◆ all_still_in_view()

bool Gcs_xcom_expels_in_progress::all_still_in_view ( Gcs_xcom_nodes const &  xcom_nodes) const

Whether all expels in progress are for members in xcom_nodes.

Parameters
xcom_nodesXCom view
Return values
trueif all expels in progress are for members in xcom_nodes
falseotherwise

◆ contains() [1/2]

bool Gcs_xcom_expels_in_progress::contains ( Gcs_member_identifier const &  member) const

Whether there is an expel in progress for member issued.

Parameters
membermember to check
Return values
truethere is an expel in progress for member
falseotherwise

◆ contains() [2/2]

bool Gcs_xcom_expels_in_progress::contains ( Gcs_member_identifier const &  member,
synode_no const  synode 
) const

Whether there is an expel in progress for member issued during the XCom configuration identified by synode.

Parameters
membermember to check
synodeXCom configuration to check
Return values
truethere is an expel in progress for member issued during the configuration identified by synode
falseotherwise

◆ forget_expels_that_have_taken_effect()

void Gcs_xcom_expels_in_progress::forget_expels_that_have_taken_effect ( synode_no const  config_id_where_members_under_effect,
std::vector< Gcs_member_identifier * > const &  members_under_effect 
)

Forget about any expel we issued for the members that have taken effect in the XCom configuration identified by config_id_where_members_under_effect.

Parameters
config_id_where_members_under_effectXCom configuration where the nodes that have left or rejoined
members_under_effectnodes that have left or rejoined

◆ number_of_expels_not_about_suspects()

std::size_t Gcs_xcom_expels_in_progress::number_of_expels_not_about_suspects ( std::vector< Gcs_member_identifier * > const &  suspected_members,
std::vector< Gcs_member_identifier * > const &  suspected_nonmembers 
) const

How many of the expels in progress do not pertain to suspected nodes.

Parameters
suspected_memberssuspected nodes that are members in the current GCS view
suspected_nonmemberssuspected nodes that are not yet members in the current GCS view
Returns
how many of the expels in progress do not pertain to suspected nodes

◆ operator=() [1/2]

Gcs_xcom_expels_in_progress & Gcs_xcom_expels_in_progress::operator= ( Gcs_xcom_expels_in_progress &&  )
default

◆ operator=() [2/2]

Gcs_xcom_expels_in_progress & Gcs_xcom_expels_in_progress::operator= ( Gcs_xcom_expels_in_progress const &  )
default

◆ remember_expels_issued()

void Gcs_xcom_expels_in_progress::remember_expels_issued ( synode_no const  config_id_where_expels_were_issued,
Gcs_xcom_nodes const &  expels_issued 
)

Keep track of members we expelled expels_issued together with the XCom configuration config_id_where_expels_were_issued that triggered the expel.

Parameters
config_id_where_expels_were_issuedXCom configuration that triggered the expel
expels_issuedmembers expelled

◆ size()

std::size_t Gcs_xcom_expels_in_progress::size ( ) const

How many expels are in progress.

Returns
how many expels are in progress

Member Data Documentation

◆ m_expels_in_progress

std::vector<std::pair<Gcs_member_identifier, synode_no> > Gcs_xcom_expels_in_progress::m_expels_in_progress
private

The documentation for this class was generated from the following files: