24#ifndef GCS_XCOM_STATE_EXCHANGE_INCLUDED 
   25#define GCS_XCOM_STATE_EXCHANGE_INCLUDED 
   44#include "plugin/group_replication/libmysqlgcs/xdr_gen/xcom_vp.h" 
  120                             synode_no configuration_id,
 
  123                             const uchar *data, uint64_t data_size);
 
  197  bool decode(
const uchar *data, uint64_t data_size);
 
  419      synode_no configuration_id, std::vector<Gcs_member_identifier *> &
total,
 
  420      std::vector<Gcs_member_identifier *> &left,
 
  421      std::vector<Gcs_member_identifier *> &joined,
 
  422      std::vector<std::unique_ptr<Gcs_message_data>> &exchangeable_data,
 
  423      Gcs_view *current_view, std::string *group,
 
  453  virtual std::vector<Gcs_xcom_node_information>
 
  481  virtual std::set<Gcs_member_identifier *> *
get_left() = 0;
 
  487  virtual std::set<Gcs_member_identifier *> *
get_total() = 0;
 
  499  virtual std::map<Gcs_member_identifier, Xcom_member_state *>
 
  525  void init() 
override;
 
  527  void reset() 
override;
 
  534      synode_no configuration_id, std::vector<Gcs_member_identifier *> &
total,
 
  535      std::vector<Gcs_member_identifier *> &left,
 
  536      std::vector<Gcs_member_identifier *> &joined,
 
  537      std::vector<std::unique_ptr<Gcs_message_data>> &exchangeable_data,
 
  538      Gcs_view *current_view, std::string *group,
 
  560  std::set<Gcs_member_identifier *> *
get_total()
 override {
 
  606      std::vector<std::unique_ptr<Gcs_message_data>> &exchangeable_data);
 
  622                       std::set<Gcs_member_identifier *> &pset);
 
This interface represents all the communication facilities that a binding implementation should provi...
Definition: gcs_communication_interface.h:90
 
It represents the identity of a group member within a certain group.
Definition: gcs_member_identifier.h:40
 
This represents the membership view that a member has from a group.
Definition: gcs_view.h:55
 
This class contains information on the configuration, i.e set of nodes or simply site definition.
Definition: gcs_xcom_group_member_information.h:391
 
Definition: gcs_xcom_state_exchange.h:370
 
virtual std::map< Gcs_member_identifier, Xcom_member_state * > * get_member_states()=0
 
virtual std::string * get_group()=0
 
virtual std::vector< Gcs_xcom_node_information > compute_incompatible_members()=0
Compute the set of incompatible members after the state exchange has finished.
 
virtual void init()=0
Accomplishes all necessary initialization steps.
 
virtual bool process_recovery_state()=0
Recovers any missing packets required for the member to join the group.
 
virtual std::set< Gcs_member_identifier * > * get_total()=0
 
virtual void end()=0
If messages were buffered during its processing, they are delivered to upper layers and internal stru...
 
virtual Gcs_xcom_view_identifier * get_new_view_id()=0
Retrieves the new view identifier after a State Exchange.
 
virtual std::set< Gcs_member_identifier * > * get_left()=0
 
virtual std::set< Gcs_member_identifier * > * get_joined()=0
 
virtual ~Gcs_xcom_state_exchange_interface()=default
 
virtual void reset()=0
If messages were buffered during its processing, they are discarded and internal structures needed ar...
 
virtual void reset_with_flush()=0
Has the same behavior as the reset but additionally flushes buffered messages.
 
virtual void compute_maximum_supported_protocol_version()=0
Computes the maximum protocol version supported by the group.
 
virtual bool state_exchange(synode_no configuration_id, std::vector< Gcs_member_identifier * > &total, std::vector< Gcs_member_identifier * > &left, std::vector< Gcs_member_identifier * > &joined, std::vector< std::unique_ptr< Gcs_message_data > > &exchangeable_data, Gcs_view *current_view, std::string *group, const Gcs_member_identifier &local_info, const Gcs_xcom_nodes &xcom_nodes)=0
Signals the module to start a State Exchange.
 
virtual bool process_member_state(Xcom_member_state *ms_info, const Gcs_member_identifier &p_id, Gcs_protocol_version maximum_supported_protocol_version, Gcs_protocol_version used_protocol_version)=0
Processes a member state message on an ongoing State Exchange round.
 
Implementation of the gcs_xcom_state_exchange_interface.
Definition: gcs_xcom_state_exchange.h:511
 
void init() override
Accomplishes all necessary initialization steps.
Definition: gcs_xcom_state_exchange.cc:334
 
std::map< Gcs_member_identifier, uint > m_awaited_vector
Definition: gcs_xcom_state_exchange.h:668
 
void update_communication_channel(const Gcs_xcom_nodes &xcom_nodes)
Update the communication system with information on membership.
Definition: gcs_xcom_state_exchange.cc:656
 
std::pair< bool, Gcs_protocol_version > members_announce_same_version() const
Checks whether all the existing group members, myself excluded, announce the same protocol version.
Definition: gcs_xcom_state_exchange.cc:754
 
std::string * get_group() override
Definition: gcs_xcom_state_exchange.h:569
 
void compute_maximum_supported_protocol_version() override
Computes the maximum protocol version supported by the group.
Definition: gcs_xcom_state_exchange.cc:941
 
Gcs_member_identifier m_local_information
Definition: gcs_xcom_state_exchange.h:688
 
std::string * m_group_name
Definition: gcs_xcom_state_exchange.h:685
 
std::set< Gcs_member_identifier * > * get_joined() override
Definition: gcs_xcom_state_exchange.h:554
 
Gcs_xcom_view_identifier * get_new_view_id() override
Retrieves the new view identifier after a State Exchange.
Definition: gcs_xcom_state_exchange.cc:1030
 
Gcs_communication_interface * m_broadcaster
Definition: gcs_xcom_state_exchange.h:666
 
std::map< Gcs_member_identifier, Xcom_member_state * > * get_member_states() override
Definition: gcs_xcom_state_exchange.h:564
 
bool is_joining()
Computes if the local member is joining.
Definition: gcs_xcom_state_exchange.cc:494
 
std::map< Gcs_member_identifier, Gcs_protocol_version > m_member_versions
Definition: gcs_xcom_state_exchange.h:679
 
Gcs_xcom_nodes m_ms_xcom_nodes
Definition: gcs_xcom_state_exchange.h:696
 
enum_gcs_error broadcast_state(const Gcs_xcom_view_identifier &proposed_view, std::vector< std::unique_ptr< Gcs_message_data > > &exchangeable_data)
Broadcasts the local state to all nodes in the Cluster.
Definition: gcs_xcom_state_exchange.cc:517
 
bool process_member_state(Xcom_member_state *ms_info, const Gcs_member_identifier &p_id, Gcs_protocol_version maximum_supported_protocol_version, Gcs_protocol_version used_protocol_version) override
Processes a member state message on an ongoing State Exchange round.
Definition: gcs_xcom_state_exchange.cc:665
 
std::vector< Gcs_xcom_node_information > compute_incompatible_members() override
Compute the set of incompatible members after the state exchange has finished.
Definition: gcs_xcom_state_exchange.cc:721
 
std::set< Gcs_member_identifier * > * get_left() override
Definition: gcs_xcom_state_exchange.h:558
 
void fill_member_set(std::vector< Gcs_member_identifier * > &in, std::set< Gcs_member_identifier * > &pset)
Converts xcom data to a set of internal representation.
Definition: gcs_xcom_state_exchange.cc:1010
 
bool incompatible_with_group() const
Checks whether this server is incompatible with the group.
Definition: gcs_xcom_state_exchange.cc:788
 
void update_awaited_vector()
Updates the structure that waits for State Exchanges.
Definition: gcs_xcom_state_exchange.cc:637
 
bool state_exchange(synode_no configuration_id, std::vector< Gcs_member_identifier * > &total, std::vector< Gcs_member_identifier * > &left, std::vector< Gcs_member_identifier * > &joined, std::vector< std::unique_ptr< Gcs_message_data > > &exchangeable_data, Gcs_view *current_view, std::string *group, const Gcs_member_identifier &local_info, const Gcs_xcom_nodes &xcom_nodes) override
Signals the module to start a State Exchange.
Definition: gcs_xcom_state_exchange.cc:409
 
bool is_leaving()
Computes if the local member is leaving.
Definition: gcs_xcom_state_exchange.cc:506
 
std::map< Gcs_member_identifier, uint > m_recover_vector
Definition: gcs_xcom_state_exchange.h:670
 
void reset_with_flush() override
Has the same behavior as the reset but additionally flushes buffered messages.
Definition: gcs_xcom_state_exchange.cc:336
 
std::set< Gcs_member_identifier * > m_ms_total
Definition: gcs_xcom_state_exchange.h:673
 
std::set< Gcs_member_identifier * > m_ms_left
Definition: gcs_xcom_state_exchange.h:673
 
bool snapshot_is_enough(Gcs_xcom_synode_set const &snapshot_to_recover) const
Auxiliary method that checks whether snapshot_to_recover contains all the synodes required.
 
void save_member_state(Xcom_member_state *ms_info, const Gcs_member_identifier &p_id, Gcs_protocol_version maximum_supported_protocol_version, Gcs_protocol_version used_protocol_version)
Stores the member's state and protocol version.
Definition: gcs_xcom_state_exchange.cc:1016
 
~Gcs_xcom_state_exchange() override
Definition: gcs_xcom_state_exchange.cc:325
 
std::map< Gcs_member_identifier, Xcom_member_state * > m_member_states
Definition: gcs_xcom_state_exchange.h:676
 
std::vector< synode_no > cached_ids
Definition: gcs_xcom_state_exchange.h:693
 
std::map< Gcs_member_identifier, Gcs_protocol_version > m_member_max_versions
Definition: gcs_xcom_state_exchange.h:682
 
void reset() override
If messages were buffered during its processing, they are discarded and internal structures needed ar...
Definition: gcs_xcom_state_exchange.cc:361
 
std::vector< Gcs_xcom_node_information > compute_incompatible_joiners()
Computes the set of incompatible nodes that are trying to join the group.
Definition: gcs_xcom_state_exchange.cc:885
 
std::set< Gcs_member_identifier * > m_ms_joined
Definition: gcs_xcom_state_exchange.h:673
 
Gcs_xcom_state_exchange(Gcs_xcom_state_exchange const &)
 
synode_no m_configuration_id
Definition: gcs_xcom_state_exchange.h:691
 
Gcs_xcom_state_exchange(Gcs_communication_interface *comm)
State Exchange constructor.
Definition: gcs_xcom_state_exchange.cc:309
 
void end() override
If messages were buffered during its processing, they are delivered to upper layers and internal stru...
Definition: gcs_xcom_state_exchange.cc:400
 
bool process_recovery_state() override
Recovers any missing packets required for the member to join the group.
Definition: gcs_xcom_state_exchange.cc:963
 
Gcs_xcom_state_exchange & operator=(Gcs_xcom_state_exchange const &)
 
std::set< Gcs_member_identifier * > * get_total() override
Definition: gcs_xcom_state_exchange.h:560
 
Definition: gcs_xcom_state_exchange.h:716
 
virtual void end_view_exchange()=0
 
virtual void end_leave()=0
 
virtual bool is_joining()=0
 
virtual bool belongs_to_group()=0
 
virtual void set_current_view(Gcs_view *current_view)=0
 
virtual bool is_leaving()=0
 
virtual bool start_leave()=0
 
virtual void set_unsafe_current_view(Gcs_view *current_view)=0
 
virtual bool is_finalized()=0
 
virtual void set_belongs_to_group(bool belong)=0
 
virtual Gcs_view * get_current_view()=0
 
virtual bool is_view_changing()=0
 
virtual ~Gcs_xcom_view_change_control_interface()=default
 
virtual void wait_for_view_change_end()=0
 
virtual void end_join()=0
 
virtual bool start_join()=0
 
virtual Gcs_view * get_unsafe_current_view()=0
 
virtual void finalize()=0
 
virtual void start_view_exchange()=0
 
Definition: gcs_xcom_state_exchange.h:754
 
void end_join() override
Definition: gcs_xcom_state_exchange.cc:1214
 
bool start_join() override
Definition: gcs_xcom_state_exchange.cc:1203
 
bool is_finalized() override
Definition: gcs_xcom_state_exchange.cc:1232
 
bool m_view_changing
Definition: gcs_xcom_state_exchange.h:783
 
My_xp_mutex_impl m_current_view_mutex
Definition: gcs_xcom_state_exchange.h:800
 
Gcs_view * get_current_view() override
Definition: gcs_xcom_state_exchange.cc:1123
 
void end_view_exchange() override
Definition: gcs_xcom_state_exchange.cc:1151
 
My_xp_cond_impl m_wait_for_view_cond
Definition: gcs_xcom_state_exchange.h:787
 
Gcs_xcom_view_change_control(Gcs_xcom_view_change_control const &)
 
~Gcs_xcom_view_change_control() override
Definition: gcs_xcom_state_exchange.cc:1102
 
bool is_view_changing() override
Definition: gcs_xcom_state_exchange.cc:1158
 
bool is_joining() override
Definition: gcs_xcom_state_exchange.cc:1220
 
void finalize() override
Definition: gcs_xcom_state_exchange.cc:1230
 
bool is_leaving() override
Definition: gcs_xcom_state_exchange.cc:1193
 
void start_view_exchange() override
Definition: gcs_xcom_state_exchange.cc:1145
 
void wait_for_view_change_end() override
Definition: gcs_xcom_state_exchange.cc:1167
 
Gcs_xcom_view_change_control & operator=(Gcs_xcom_view_change_control const &)
 
bool belongs_to_group() override
Definition: gcs_xcom_state_exchange.cc:1137
 
void set_belongs_to_group(bool belong) override
Definition: gcs_xcom_state_exchange.cc:1141
 
void set_current_view(Gcs_view *current_view) override
Definition: gcs_xcom_state_exchange.cc:1109
 
bool start_leave() override
Definition: gcs_xcom_state_exchange.cc:1176
 
bool m_joining
Definition: gcs_xcom_state_exchange.h:785
 
My_xp_mutex_impl m_joining_leaving_mutex
Definition: gcs_xcom_state_exchange.h:789
 
void end_leave() override
Definition: gcs_xcom_state_exchange.cc:1187
 
Gcs_xcom_view_change_control()
Definition: gcs_xcom_state_exchange.cc:1079
 
bool m_belongs_to_group
Definition: gcs_xcom_state_exchange.h:805
 
std::atomic< bool > m_finalized
Definition: gcs_xcom_state_exchange.h:809
 
Gcs_view * m_current_view
Definition: gcs_xcom_state_exchange.h:794
 
My_xp_mutex_impl m_wait_for_view_mutex
Definition: gcs_xcom_state_exchange.h:788
 
Gcs_view * get_unsafe_current_view() override
Definition: gcs_xcom_state_exchange.cc:1133
 
bool m_leaving
Definition: gcs_xcom_state_exchange.h:784
 
void set_unsafe_current_view(Gcs_view *current_view) override
Definition: gcs_xcom_state_exchange.cc:1117
 
Definition: gcs_xcom_view_identifier.h:33
 
Definition: my_xp_cond.h:136
 
Definition: my_xp_mutex.h:123
 
Class that conveys the state to be exchanged between members, which is not provided by XCom.
Definition: gcs_xcom_state_exchange.h:105
 
Xcom_member_state & operator=(Xcom_member_state const &)=delete
 
Xcom_member_state(Xcom_member_state const &)=delete
 
Gcs_xcom_view_identifier * m_view_id
Definition: gcs_xcom_state_exchange.h:263
 
synode_no m_configuration_id
Definition: gcs_xcom_state_exchange.h:269
 
const Gcs_xcom_synode_set & get_snapshot() const
Definition: gcs_xcom_state_exchange.h:245
 
Gcs_protocol_version m_version
GCS communication version number in use.
Definition: gcs_xcom_state_exchange.h:294
 
static constexpr uint64_t get_encode_snapshot_elem_size()
Definition: gcs_xcom_state_exchange.h:255
 
Gcs_xcom_view_identifier * get_view_id()
Definition: gcs_xcom_state_exchange.h:225
 
uint64_t get_encode_payload_size() const
Definition: gcs_xcom_state_exchange.cc:74
 
static constexpr uint64_t get_encode_header_size()
Definition: gcs_xcom_state_exchange.h:209
 
bool decode_header(const uchar *buffer, uint64_t buffer_len)
Decodes the Member State's header that was sent through the network.
Definition: gcs_xcom_state_exchange.cc:206
 
uchar * m_data
Definition: gcs_xcom_state_exchange.h:274
 
static constexpr auto WIRE_XCOM_SNAPSHOT_NR_ELEMS_SIZE
Definition: gcs_xcom_state_exchange.h:253
 
static constexpr auto WIRE_XCOM_VARIABLE_VIEW_ID_SIZE
Definition: gcs_xcom_state_exchange.h:248
 
static constexpr auto WIRE_XCOM_VIEW_ID_SIZE
Definition: gcs_xcom_state_exchange.h:249
 
static constexpr auto WIRE_XCOM_GROUP_ID_SIZE
Definition: gcs_xcom_state_exchange.h:250
 
uint64_t get_data_size() const
Definition: gcs_xcom_state_exchange.h:243
 
uint64_t m_data_size
Definition: gcs_xcom_state_exchange.h:279
 
bool encode_header(uchar *buffer, uint64_t *buffer_len) const
Encodes the Member State's header to be sent through the newtwork.
Definition: gcs_xcom_state_exchange.cc:92
 
bool encode_snapshot(uchar *buffer, uint64_t *buffer_len) const
Encodes the Member State's snapshot to be sent through the network.
Definition: gcs_xcom_state_exchange.cc:159
 
static constexpr auto WIRE_XCOM_NODE_ID_SIZE
Definition: gcs_xcom_state_exchange.h:252
 
~Xcom_member_state()
Member state destructor.
Definition: gcs_xcom_state_exchange.cc:69
 
static constexpr auto WIRE_XCOM_MSG_ID_SIZE
Definition: gcs_xcom_state_exchange.h:251
 
bool decode(const uchar *data, uint64_t data_size)
Decodes Member State that was sent through the network.
Definition: gcs_xcom_state_exchange.cc:281
 
Xcom_member_state(const Gcs_xcom_view_identifier &view_id, synode_no configuration_id, Gcs_protocol_version version, const Gcs_xcom_synode_set &snapshot, const uchar *data, uint64_t data_size)
Xcom_member_state constructor.
Definition: gcs_xcom_state_exchange.cc:38
 
bool decode_snapshot(const uchar *buffer, uint64_t buffer_len)
Decodes the Member State's snapshot that was sent through the network.
Definition: gcs_xcom_state_exchange.cc:239
 
synode_no get_configuration_id() const
Definition: gcs_xcom_state_exchange.h:231
 
Gcs_xcom_synode_set m_snapshot
Recovery information which is currently a list of the XCom synods of the fragments that are in buffer...
Definition: gcs_xcom_state_exchange.h:289
 
const uchar * get_data() const
Definition: gcs_xcom_state_exchange.h:237
 
uint64_t get_encode_snapshot_size() const
Definition: gcs_xcom_state_exchange.cc:78
 
enum_gcs_error
This enumeration describes errors which can occur during group communication operations.
Definition: gcs_types.h:41
 
Gcs_protocol_version
The GCS protocol versions.
Definition: gcs_types.h:128
 
std::unordered_set< Gcs_xcom_synode > Gcs_xcom_synode_set
Definition: gcs_xcom_synode.h:84
 
unsigned char uchar
Definition: my_inttypes.h:52
 
Type total(const Shards< COUNT > &shards) noexcept
Get the total value of all shards.
Definition: ut0counter.h:333
 
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:420
 
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2879
 
required uint64 version
Definition: replication_group_member_actions.proto:41