Derecho  0.9
Distributed systems toolkit for RDMA
Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
derecho::MulticastGroup Class Reference

Implements the low-level mechanics of tracking multicasts in a Derecho group, using RDMC to deliver messages and SST to track their arrival and stability. More...

#include <multicast_group.hpp>

Collaboration diagram for derecho::MulticastGroup:
Collaboration graph
[legend]

Public Member Functions

 MulticastGroup (std::vector< node_id_t > members, node_id_t my_node_id, std::shared_ptr< DerechoSST > sst, CallbackSet callbacks, uint32_t total_num_subgroups, const std::map< subgroup_id_t, SubgroupSettings > &subgroup_settings_by_id, unsigned int sender_timeout, const subgroup_post_next_version_func_t &post_next_version_callback, const persistence_manager_callbacks_t &persistence_manager_callbacks, std::vector< char > already_failed={})
 Standard constructor for setting up a MulticastGroup for the first time. More...
 
 MulticastGroup (std::vector< node_id_t > members, node_id_t my_node_id, std::shared_ptr< DerechoSST > sst, MulticastGroup &&old_group, uint32_t total_num_subgroups, const std::map< subgroup_id_t, SubgroupSettings > &subgroup_settings_by_id, const subgroup_post_next_version_func_t &post_next_version_callback, const persistence_manager_callbacks_t &persistence_manager_callbacks, std::vector< char > already_failed={})
 Constructor to initialize a new MulticastGroup from an old one, preserving the same settings but providing a new list of members. More...
 
 ~MulticastGroup ()
 
void register_rpc_callback (rpc_handler_t handler)
 Registers a function to be called upon receipt of a multicast RPC message. More...
 
void deliver_messages_upto (const std::vector< int32_t > &max_indices_for_senders, subgroup_id_t subgroup_num, uint32_t num_shard_senders)
 
bool send (subgroup_id_t subgroup_num, long long unsigned int payload_size, const std::function< void(char *buf)> &msg_generator, bool cooked_send)
 Send now internally calls get_sendbuffer_ptr. More...
 
bool check_pending_sst_sends (subgroup_id_t subgroup_num)
 
const uint64_t compute_global_stability_frontier (subgroup_id_t subgroup_num)
 
void wedge ()
 Stops all sending and receiving in this group, in preparation for shutting it down. More...
 
void debug_print ()
 Debugging function; prints the current state of the SST to stdout. More...
 
const std::map< subgroup_id_t, SubgroupSettings > & get_subgroup_settings ()
 
std::vector< uint32_t > get_shard_sst_indices (subgroup_id_t subgroup_num)
 

Private Types

using pred_handle = typename sst::Predicates< DerechoSST >::pred_handle
 

Private Member Functions

void send_loop ()
 Continuously waits for a new pending send, then sends it. More...
 
uint64_t get_time ()
 
void check_failures_loop ()
 Checks for failures when a sender reaches its timeout. More...
 
bool create_rdmc_sst_groups ()
 
void initialize_sst_row ()
 
void register_predicates ()
 
void deliver_message (RDMCMessage &msg, const subgroup_id_t &subgroup_num, const persistent::version_t &version, const uint64_t &msg_timestamp)
 Delivers a single message to the application layer, either by invoking an RPC function or by calling a global stability callback. More...
 
void deliver_message (SSTMessage &msg, const subgroup_id_t &subgroup_num, const persistent::version_t &version, const uint64_t &msg_timestamp)
 Same as the other deliver_message, but for the SSTMessage type. More...
 
bool version_message (RDMCMessage &msg, const subgroup_id_t &subgroup_num, const persistent::version_t &version, const uint64_t &msg_timestamp)
 Enqueues a single message for persistence with the persistence manager. More...
 
bool version_message (SSTMessage &msg, const subgroup_id_t &subgroup_num, const persistent::version_t &version, const uint64_t &msg_timestamp)
 Same as the other version_message, but for the SSTMessage type. More...
 
uint32_t get_num_senders (const std::vector< int > &shard_senders)
 
int32_t resolve_num_received (int32_t index, uint32_t num_received_entry)
 
void delivery_trigger (subgroup_id_t subgroup_num, const SubgroupSettings &subgroup_settings, const uint32_t num_shard_members, DerechoSST &sst)
 
void sst_receive_handler (subgroup_id_t subgroup_num, const SubgroupSettings &subgroup_settings, const std::map< uint32_t, uint32_t > &shard_ranks_by_sender_rank, uint32_t num_shard_senders, uint32_t sender_rank, volatile char *data, uint64_t size)
 
bool receiver_predicate (const SubgroupSettings &subgroup_settings, const std::map< uint32_t, uint32_t > &shard_ranks_by_sender_rank, uint32_t num_shard_senders, const DerechoSST &sst)
 
void receiver_function (subgroup_id_t subgroup_num, const SubgroupSettings &subgroup_settings, const std::map< uint32_t, uint32_t > &shard_ranks_by_sender_rank, uint32_t num_shard_senders, DerechoSST &sst, unsigned int batch_size, const std::function< void(uint32_t, volatile char *, uint32_t)> &sst_receive_handler_lambda)
 
void get_buffer_and_send_auto_null (subgroup_id_t subgroup_num)
 
char * get_sendbuffer_ptr (subgroup_id_t subgroup_num, long long unsigned int payload_size, bool cooked_send)
 

Private Attributes

std::vector< node_id_tmembers
 vector of member id's More...
 
std::map< node_id_t, uint32_t > node_id_to_sst_index
 inverse map of node_ids to sst_row More...
 
const unsigned int num_members
 number of members More...
 
const int member_index
 index of the local node in the members vector, which should also be its row index in the SST More...
 
const CallbackSet callbacks
 Message-delivery event callbacks, supplied by the client, for "raw" sends. More...
 
uint32_t total_num_subgroups
 
const std::map< subgroup_id_t, SubgroupSettingssubgroup_settings_map
 Maps subgroup IDs (for subgroups this node is a member of) to an immutable set of configuration options for that subgroup. More...
 
std::vector< std::list< int32_t > > received_intervals
 Used for synchronizing receives by RDMC and SST. More...
 
std::map< subgroup_id_t, uint32_t > subgroup_to_rdmc_group
 Maps subgroup IDs for which this node is a sender to the RDMC group it should use to send. More...
 
rpc_handler_t rpc_callback
 These two callbacks are internal, not exposed to clients, so they're not in CallbackSet. More...
 
uint16_t rdmc_group_num_offset
 Offset to add to member ranks to form RDMC group numbers. More...
 
bool rdmc_sst_groups_created = false
 false if RDMC groups haven't been created successfully More...
 
std::map< uint32_t, std::vector< MessageBuffer > > free_message_buffers
 Stores message buffers not currently in use. More...
 
std::vector< message_id_tfuture_message_indices
 Index to be used the next time get_sendbuffer_ptr is called. More...
 
std::vector< std::optional< RDMCMessage > > next_sends
 next_message is the message that will be sent when send is called the next time. More...
 
std::map< uint32_t, bool > pending_sst_sends
 
std::vector< std::queue< RDMCMessage > > pending_sends
 Messages that are ready to be sent, but must wait until the current send finishes. More...
 
std::vector< std::optional< RDMCMessage > > current_sends
 Vector of messages that are currently being sent out using RDMC, or boost::none otherwise. More...
 
std::map< std::pair< subgroup_id_t, node_id_t >, RDMCMessagecurrent_receives
 Messages that are currently being received. More...
 
std::map< subgroup_id_t, std::function< void(char *, size_t)> > singleton_shard_receive_handlers
 Receiver lambdas for shards that have only one member. More...
 
std::map< subgroup_id_t, std::map< message_id_t, RDMCMessage > > locally_stable_rdmc_messages
 Messages that have finished sending/receiving but aren't yet globally stable. More...
 
std::map< subgroup_id_t, std::map< message_id_t, SSTMessage > > locally_stable_sst_messages
 Same map as locally_stable_rdmc_messages, but for SST messages. More...
 
std::map< subgroup_id_t, std::set< uint64_t > > pending_message_timestamps
 
std::map< subgroup_id_t, std::map< message_id_t, uint64_t > > pending_persistence
 
std::map< subgroup_id_t, std::map< message_id_t, RDMCMessage > > non_persistent_messages
 Messages that are currently being written to persistent storage. More...
 
std::map< subgroup_id_t, std::map< message_id_t, SSTMessage > > non_persistent_sst_messages
 Messages that are currently being written to persistent storage. More...
 
std::vector< message_id_tnext_message_to_deliver
 
std::recursive_mutex msg_state_mtx
 
std::condition_variable_any sender_cv
 
unsigned int sender_timeout
 The time, in milliseconds, that a sender can wait to send a message before it is considered failed. More...
 
std::atomic< bool > thread_shutdown {false}
 Indicates that the group is being destroyed. More...
 
std::thread sender_thread
 The background thread that sends messages with RDMC. More...
 
std::thread timeout_thread
 
std::shared_ptr< DerechoSSTsst
 The SST, shared between this group and its GMS. More...
 
std::vector< std::unique_ptr< sst::multicast_group< DerechoSST > > > sst_multicast_group_ptrs
 The SSTs for multicasts. More...
 
std::list< pred_handlereceiver_pred_handles
 
std::list< pred_handlestability_pred_handles
 
std::list< pred_handledelivery_pred_handles
 
std::list< pred_handlepersistence_pred_handles
 
std::list< pred_handlesender_pred_handles
 
std::vector< bool > last_transfer_medium
 
subgroup_post_next_version_func_t post_next_version_callback
 post the next version to a subgroup just before deliver a message so that the user code know the current version being handled. More...
 
persistence_manager_callbacks_t persistence_manager_callbacks
 persistence manager callbacks More...
 

Friends

class ViewManager
 

Detailed Description

Implements the low-level mechanics of tracking multicasts in a Derecho group, using RDMC to deliver messages and SST to track their arrival and stability.

This class should only be used as part of a Group, since it does not know how to handle failures.

Definition at line 247 of file multicast_group.hpp.

Member Typedef Documentation

◆ pred_handle

Definition at line 332 of file multicast_group.hpp.

Constructor & Destructor Documentation

◆ MulticastGroup() [1/2]

derecho::MulticastGroup::MulticastGroup ( std::vector< node_id_t members,
node_id_t  my_node_id,
std::shared_ptr< DerechoSST sst,
CallbackSet  callbacks,
uint32_t  total_num_subgroups,
const std::map< subgroup_id_t, SubgroupSettings > &  subgroup_settings_by_id,
unsigned int  sender_timeout,
const subgroup_post_next_version_func_t post_next_version_callback,
const persistence_manager_callbacks_t persistence_manager_callbacks,
std::vector< char >  already_failed = {} 
)

Standard constructor for setting up a MulticastGroup for the first time.

Parameters
_membersA list of node IDs of members in this group
my_node_idThe rank (ID) of this node in the group
_sstThe SST this group will use; created by the GMS (membership service) for this group.
_callbacksA set of functions to call when messages have reached various levels of stability
total_num_subgroupsThe total number of subgroups in this Derecho Group
subgroup_settings_by_idA list of SubgroupSettings, one for each subgroup this node belongs to, indexed by subgroup ID
post_next_version_callbackThe callback for posting the upcoming version to be delivered in a subgroup.
persistence_manager_callbacksThe callbacks to PersistenceManager that will be used to persist received messages
already_failed(Optional) A Boolean vector indicating which elements of _members are nodes that have already failed in this view

Definition at line 28 of file multicast_group.cpp.

◆ MulticastGroup() [2/2]

derecho::MulticastGroup::MulticastGroup ( std::vector< node_id_t members,
node_id_t  my_node_id,
std::shared_ptr< DerechoSST sst,
MulticastGroup &&  old_group,
uint32_t  total_num_subgroups,
const std::map< subgroup_id_t, SubgroupSettings > &  subgroup_settings_by_id,
const subgroup_post_next_version_func_t post_next_version_callback,
const persistence_manager_callbacks_t persistence_manager_callbacks,
std::vector< char >  already_failed = {} 
)

Constructor to initialize a new MulticastGroup from an old one, preserving the same settings but providing a new list of members.

Definition at line 89 of file multicast_group.cpp.

◆ ~MulticastGroup()

derecho::MulticastGroup::~MulticastGroup ( )

Definition at line 950 of file multicast_group.cpp.

Member Function Documentation

◆ check_failures_loop()

void derecho::MulticastGroup::check_failures_loop ( )
private

Checks for failures when a sender reaches its timeout.

This function implements the timeout thread.

Definition at line 1086 of file multicast_group.cpp.

◆ check_pending_sst_sends()

bool derecho::MulticastGroup::check_pending_sst_sends ( subgroup_id_t  subgroup_num)

Definition at line 1314 of file multicast_group.cpp.

◆ compute_global_stability_frontier()

const uint64_t derecho::MulticastGroup::compute_global_stability_frontier ( subgroup_id_t  subgroup_num)

Definition at line 1076 of file multicast_group.cpp.

◆ create_rdmc_sst_groups()

bool derecho::MulticastGroup::create_rdmc_sst_groups ( )
private

Definition at line 236 of file multicast_group.cpp.

◆ debug_print()

void derecho::MulticastGroup::debug_print ( )

Debugging function; prints the current state of the SST to stdout.

Definition at line 1329 of file multicast_group.cpp.

◆ deliver_message() [1/2]

void derecho::MulticastGroup::deliver_message ( RDMCMessage msg,
const subgroup_id_t subgroup_num,
const persistent::version_t version,
const uint64_t &  msg_timestamp 
)
private

Delivers a single message to the application layer, either by invoking an RPC function or by calling a global stability callback.

Parameters
msgA reference to the message
subgroup_numThe ID of the subgroup this message is in
versionThe version assigned to the message
msg_tsThe timestamp of the message

Definition at line 450 of file multicast_group.cpp.

◆ deliver_message() [2/2]

void derecho::MulticastGroup::deliver_message ( SSTMessage msg,
const subgroup_id_t subgroup_num,
const persistent::version_t version,
const uint64_t &  msg_timestamp 
)
private

Same as the other deliver_message, but for the SSTMessage type.

Parameters
msgA reference to the message to deliver
subgroup_numThe ID of the subgroup this message is in
versionThe version assigned to the message
msg_tsThe timestamp of this message

Definition at line 472 of file multicast_group.cpp.

◆ deliver_messages_upto()

void derecho::MulticastGroup::deliver_messages_upto ( const std::vector< int32_t > &  max_indices_for_senders,
subgroup_id_t  subgroup_num,
uint32_t  num_shard_senders 
)

Definition at line 538 of file multicast_group.cpp.

◆ delivery_trigger()

void derecho::MulticastGroup::delivery_trigger ( subgroup_id_t  subgroup_num,
const SubgroupSettings subgroup_settings,
const uint32_t  num_shard_members,
DerechoSST sst 
)
private

Definition at line 752 of file multicast_group.cpp.

◆ get_buffer_and_send_auto_null()

void derecho::MulticastGroup::get_buffer_and_send_auto_null ( subgroup_id_t  subgroup_num)
private

Definition at line 1122 of file multicast_group.cpp.

◆ get_num_senders()

uint32_t derecho::MulticastGroup::get_num_senders ( const std::vector< int > &  shard_senders)
inlineprivate

Definition at line 410 of file multicast_group.hpp.

◆ get_sendbuffer_ptr()

char * derecho::MulticastGroup::get_sendbuffer_ptr ( subgroup_id_t  subgroup_num,
long long unsigned int  payload_size,
bool  cooked_send 
)
private

Definition at line 1172 of file multicast_group.cpp.

◆ get_shard_sst_indices()

std::vector< uint32_t > derecho::MulticastGroup::get_shard_sst_indices ( subgroup_id_t  subgroup_num)

Definition at line 1319 of file multicast_group.cpp.

◆ get_subgroup_settings()

const std::map<subgroup_id_t, SubgroupSettings>& derecho::MulticastGroup::get_subgroup_settings ( )
inline
Returns
a map from subgroup ID to SubgroupSettings for only those subgroups that this node belongs to.

Definition at line 516 of file multicast_group.hpp.

◆ get_time()

uint64_t derecho::MulticastGroup::get_time ( )
private

Definition at line 1070 of file multicast_group.cpp.

◆ initialize_sst_row()

void derecho::MulticastGroup::initialize_sst_row ( )
private

Definition at line 433 of file multicast_group.cpp.

◆ receiver_function()

void derecho::MulticastGroup::receiver_function ( subgroup_id_t  subgroup_num,
const SubgroupSettings subgroup_settings,
const std::map< uint32_t, uint32_t > &  shard_ranks_by_sender_rank,
uint32_t  num_shard_senders,
DerechoSST sst,
unsigned int  batch_size,
const std::function< void(uint32_t, volatile char *, uint32_t)> &  sst_receive_handler_lambda 
)
private

Definition at line 709 of file multicast_group.cpp.

◆ receiver_predicate()

bool derecho::MulticastGroup::receiver_predicate ( const SubgroupSettings subgroup_settings,
const std::map< uint32_t, uint32_t > &  shard_ranks_by_sender_rank,
uint32_t  num_shard_senders,
const DerechoSST sst 
)
private

Definition at line 624 of file multicast_group.cpp.

◆ register_predicates()

void derecho::MulticastGroup::register_predicates ( )
private

Definition at line 819 of file multicast_group.cpp.

◆ register_rpc_callback()

void derecho::MulticastGroup::register_rpc_callback ( rpc_handler_t  handler)
inline

Registers a function to be called upon receipt of a multicast RPC message.

Parameters
handlerA function that will handle RPC messages.

Definition at line 496 of file multicast_group.hpp.

◆ resolve_num_received()

int32_t derecho::MulticastGroup::resolve_num_received ( int32_t  index,
uint32_t  num_received_entry 
)
private

Definition at line 590 of file multicast_group.cpp.

◆ send()

bool derecho::MulticastGroup::send ( subgroup_id_t  subgroup_num,
long long unsigned int  payload_size,
const std::function< void(char *buf)> &  msg_generator,
bool  cooked_send 
)

Send now internally calls get_sendbuffer_ptr.

The user function that generates the message is supplied to send

Definition at line 1277 of file multicast_group.cpp.

◆ send_loop()

void derecho::MulticastGroup::send_loop ( )
private

Continuously waits for a new pending send, then sends it.

This function implements the sender thread.

Definition at line 991 of file multicast_group.cpp.

◆ sst_receive_handler()

void derecho::MulticastGroup::sst_receive_handler ( subgroup_id_t  subgroup_num,
const SubgroupSettings subgroup_settings,
const std::map< uint32_t, uint32_t > &  shard_ranks_by_sender_rank,
uint32_t  num_shard_senders,
uint32_t  sender_rank,
volatile char *  data,
uint64_t  size 
)
private

Definition at line 639 of file multicast_group.cpp.

◆ version_message() [1/2]

bool derecho::MulticastGroup::version_message ( RDMCMessage msg,
const subgroup_id_t subgroup_num,
const persistent::version_t version,
const uint64_t &  msg_timestamp 
)
private

Enqueues a single message for persistence with the persistence manager.

Note that this does not actually wait for the message to be persisted; you must still post a persistence request with the persistence manager.

Parameters
msgThe message that should cause a new version to be registered with PersistenceManager
subgroup_numThe ID of the subgroup this message is in
versionThe version assigned to the message
msg_tsThe timestamp of this message
Returns
true if a new version was created false if the message is a null message

Definition at line 494 of file multicast_group.cpp.

◆ version_message() [2/2]

bool derecho::MulticastGroup::version_message ( SSTMessage msg,
const subgroup_id_t subgroup_num,
const persistent::version_t version,
const uint64_t &  msg_timestamp 
)
private

Same as the other version_message, but for the SSTMessage type.

Parameters
msgThe message that should cause a new version to be registered with PersistenceManager
subgroup_numThe ID of the subgroup this message is in
versionThe version assigned to the message
msg_tsThe timestamp of this message
Returns
true if a new version was created false if the message is a null message

Definition at line 516 of file multicast_group.cpp.

◆ wedge()

void derecho::MulticastGroup::wedge ( )

Stops all sending and receiving in this group, in preparation for shutting it down.

Definition at line 957 of file multicast_group.cpp.

Friends And Related Function Documentation

◆ ViewManager

friend class ViewManager
friend

Definition at line 248 of file multicast_group.hpp.

Member Data Documentation

◆ callbacks

const CallbackSet derecho::MulticastGroup::callbacks
private

Message-delivery event callbacks, supplied by the client, for "raw" sends.

Definition at line 260 of file multicast_group.hpp.

◆ current_receives

std::map<std::pair<subgroup_id_t, node_id_t>, RDMCMessage> derecho::MulticastGroup::current_receives
private

Messages that are currently being received.

Definition at line 296 of file multicast_group.hpp.

◆ current_sends

std::vector<std::optional<RDMCMessage> > derecho::MulticastGroup::current_sends
private

Vector of messages that are currently being sent out using RDMC, or boost::none otherwise.

one per subgroup

Definition at line 293 of file multicast_group.hpp.

◆ delivery_pred_handles

std::list<pred_handle> derecho::MulticastGroup::delivery_pred_handles
private

Definition at line 335 of file multicast_group.hpp.

◆ free_message_buffers

std::map<uint32_t, std::vector<MessageBuffer> > derecho::MulticastGroup::free_message_buffers
private

Stores message buffers not currently in use.

Protected by msg_state_mtx

Definition at line 279 of file multicast_group.hpp.

◆ future_message_indices

std::vector<message_id_t> derecho::MulticastGroup::future_message_indices
private

Index to be used the next time get_sendbuffer_ptr is called.

When next_message is not none, then next_message.index = future_message_index-1

Definition at line 283 of file multicast_group.hpp.

◆ last_transfer_medium

std::vector<bool> derecho::MulticastGroup::last_transfer_medium
private

Definition at line 339 of file multicast_group.hpp.

◆ locally_stable_rdmc_messages

std::map<subgroup_id_t, std::map<message_id_t, RDMCMessage> > derecho::MulticastGroup::locally_stable_rdmc_messages
private

Messages that have finished sending/receiving but aren't yet globally stable.

Organized by [subgroup number] -> [sequence number] -> [message]

Definition at line 302 of file multicast_group.hpp.

◆ locally_stable_sst_messages

std::map<subgroup_id_t, std::map<message_id_t, SSTMessage> > derecho::MulticastGroup::locally_stable_sst_messages
private

Same map as locally_stable_rdmc_messages, but for SST messages.

Definition at line 304 of file multicast_group.hpp.

◆ member_index

const int derecho::MulticastGroup::member_index
private

index of the local node in the members vector, which should also be its row index in the SST

Definition at line 258 of file multicast_group.hpp.

◆ members

std::vector<node_id_t> derecho::MulticastGroup::members
private

vector of member id's

Definition at line 252 of file multicast_group.hpp.

◆ msg_state_mtx

std::recursive_mutex derecho::MulticastGroup::msg_state_mtx
private

Definition at line 313 of file multicast_group.hpp.

◆ next_message_to_deliver

std::vector<message_id_t> derecho::MulticastGroup::next_message_to_deliver
private

Definition at line 312 of file multicast_group.hpp.

◆ next_sends

std::vector<std::optional<RDMCMessage> > derecho::MulticastGroup::next_sends
private

next_message is the message that will be sent when send is called the next time.

It is std::nullopt when there is no message to send.

Definition at line 287 of file multicast_group.hpp.

◆ node_id_to_sst_index

std::map<node_id_t, uint32_t> derecho::MulticastGroup::node_id_to_sst_index
private

inverse map of node_ids to sst_row

Definition at line 254 of file multicast_group.hpp.

◆ non_persistent_messages

std::map<subgroup_id_t, std::map<message_id_t, RDMCMessage> > derecho::MulticastGroup::non_persistent_messages
private

Messages that are currently being written to persistent storage.

Definition at line 308 of file multicast_group.hpp.

◆ non_persistent_sst_messages

std::map<subgroup_id_t, std::map<message_id_t, SSTMessage> > derecho::MulticastGroup::non_persistent_sst_messages
private

Messages that are currently being written to persistent storage.

Definition at line 310 of file multicast_group.hpp.

◆ num_members

const unsigned int derecho::MulticastGroup::num_members
private

number of members

Definition at line 256 of file multicast_group.hpp.

◆ pending_message_timestamps

std::map<subgroup_id_t, std::set<uint64_t> > derecho::MulticastGroup::pending_message_timestamps
private

Definition at line 305 of file multicast_group.hpp.

◆ pending_persistence

std::map<subgroup_id_t, std::map<message_id_t, uint64_t> > derecho::MulticastGroup::pending_persistence
private

Definition at line 306 of file multicast_group.hpp.

◆ pending_sends

std::vector<std::queue<RDMCMessage> > derecho::MulticastGroup::pending_sends
private

Messages that are ready to be sent, but must wait until the current send finishes.

Definition at line 290 of file multicast_group.hpp.

◆ pending_sst_sends

std::map<uint32_t, bool> derecho::MulticastGroup::pending_sst_sends
private

Definition at line 288 of file multicast_group.hpp.

◆ persistence_manager_callbacks

persistence_manager_callbacks_t derecho::MulticastGroup::persistence_manager_callbacks
private

persistence manager callbacks

Definition at line 346 of file multicast_group.hpp.

◆ persistence_pred_handles

std::list<pred_handle> derecho::MulticastGroup::persistence_pred_handles
private

Definition at line 336 of file multicast_group.hpp.

◆ post_next_version_callback

subgroup_post_next_version_func_t derecho::MulticastGroup::post_next_version_callback
private

post the next version to a subgroup just before deliver a message so that the user code know the current version being handled.

Definition at line 343 of file multicast_group.hpp.

◆ rdmc_group_num_offset

uint16_t derecho::MulticastGroup::rdmc_group_num_offset
private

Offset to add to member ranks to form RDMC group numbers.

Definition at line 274 of file multicast_group.hpp.

◆ rdmc_sst_groups_created

bool derecho::MulticastGroup::rdmc_sst_groups_created = false
private

false if RDMC groups haven't been created successfully

Definition at line 276 of file multicast_group.hpp.

◆ received_intervals

std::vector<std::list<int32_t> > derecho::MulticastGroup::received_intervals
private

Used for synchronizing receives by RDMC and SST.

Definition at line 266 of file multicast_group.hpp.

◆ receiver_pred_handles

std::list<pred_handle> derecho::MulticastGroup::receiver_pred_handles
private

Definition at line 333 of file multicast_group.hpp.

◆ rpc_callback

rpc_handler_t derecho::MulticastGroup::rpc_callback
private

These two callbacks are internal, not exposed to clients, so they're not in CallbackSet.

Definition at line 271 of file multicast_group.hpp.

◆ sender_cv

std::condition_variable_any derecho::MulticastGroup::sender_cv
private

Definition at line 314 of file multicast_group.hpp.

◆ sender_pred_handles

std::list<pred_handle> derecho::MulticastGroup::sender_pred_handles
private

Definition at line 337 of file multicast_group.hpp.

◆ sender_thread

std::thread derecho::MulticastGroup::sender_thread
private

The background thread that sends messages with RDMC.

Definition at line 322 of file multicast_group.hpp.

◆ sender_timeout

unsigned int derecho::MulticastGroup::sender_timeout
private

The time, in milliseconds, that a sender can wait to send a message before it is considered failed.

Definition at line 317 of file multicast_group.hpp.

◆ singleton_shard_receive_handlers

std::map<subgroup_id_t, std::function<void(char*, size_t)> > derecho::MulticastGroup::singleton_shard_receive_handlers
private

Receiver lambdas for shards that have only one member.

Definition at line 298 of file multicast_group.hpp.

◆ sst

std::shared_ptr<DerechoSST> derecho::MulticastGroup::sst
private

The SST, shared between this group and its GMS.

Definition at line 327 of file multicast_group.hpp.

◆ sst_multicast_group_ptrs

std::vector<std::unique_ptr<sst::multicast_group<DerechoSST> > > derecho::MulticastGroup::sst_multicast_group_ptrs
private

The SSTs for multicasts.

Definition at line 330 of file multicast_group.hpp.

◆ stability_pred_handles

std::list<pred_handle> derecho::MulticastGroup::stability_pred_handles
private

Definition at line 334 of file multicast_group.hpp.

◆ subgroup_settings_map

const std::map<subgroup_id_t, SubgroupSettings> derecho::MulticastGroup::subgroup_settings_map
private

Maps subgroup IDs (for subgroups this node is a member of) to an immutable set of configuration options for that subgroup.

Definition at line 264 of file multicast_group.hpp.

◆ subgroup_to_rdmc_group

std::map<subgroup_id_t, uint32_t> derecho::MulticastGroup::subgroup_to_rdmc_group
private

Maps subgroup IDs for which this node is a sender to the RDMC group it should use to send.

Constructed incrementally in create_rdmc_sst_groups(), so it can't be const.

Definition at line 269 of file multicast_group.hpp.

◆ thread_shutdown

std::atomic<bool> derecho::MulticastGroup::thread_shutdown {false}
private

Indicates that the group is being destroyed.

Definition at line 320 of file multicast_group.hpp.

◆ timeout_thread

std::thread derecho::MulticastGroup::timeout_thread
private

Definition at line 324 of file multicast_group.hpp.

◆ total_num_subgroups

uint32_t derecho::MulticastGroup::total_num_subgroups
private

Definition at line 261 of file multicast_group.hpp.


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