|
xrpld
|
Slot is associated with a specific validator via validator's public key. More...
#include <Slot.h>

Classes | |
| struct | PeerInfo |
| Data maintained for each peer. More... | |
Private Types | |
| using | id_t = Peer::id_t |
| using | time_point = ClockType::time_point |
| using | ignored_squelch_callback = std::function<void()> |
Private Member Functions | |
| Slot (SquelchHandler const &handler, beast::Journal journal, uint16_t maxSelectedPeers) | |
| Constructor. | |
| void | update (PublicKey const &validator, id_t id, protocol::MessageType type, ignored_squelch_callback callback) |
| Update peer info. | |
| void | deletePeer (PublicKey const &validator, id_t id, bool erase) |
| Handle peer deletion when a peer disconnects. | |
| time_point const & | getLastSelected () const |
| Get the time of the last peer selection round. | |
| std::uint16_t | inState (PeerState state) const |
| Return number of peers in state. | |
| std::uint16_t | notInState (PeerState state) const |
| Return number of peers not in state. | |
| SlotState | getState () const |
| Return Slot's state. | |
| std::set< id_t > | getSelected () const |
| Return selected peers. | |
| std::unordered_map< id_t, std::tuple< PeerState, uint16_t, uint32_t, uint32_t > > | getPeers () const |
| Get peers info. | |
| void | deleteIdlePeer (PublicKey const &validator) |
| Check if peers stopped relaying messages. | |
| std::chrono::seconds | getSquelchDuration (std::size_t npeers) |
| Get random squelch duration between kMinUnsquelchExpire and min(max(kMaxUnsquelchExpireDefault, kSquelchPerPeer * npeers),
kMaxUnsquelchExpirePeers). | |
| void | resetCounts () |
| Reset counts of peers in Selected or Counting state. | |
| void | initCounting () |
| Initialize slot to Counting state. | |
Private Attributes | |
| std::unordered_map< id_t, PeerInfo > | peers_ |
| std::unordered_set< id_t > | considered_ |
| std::uint16_t | reachedThreshold_ {0} |
| ClockType::time_point | lastSelected_ |
| SlotState | state_ {SlotState::Counting} |
| SquelchHandler const & | handler_ |
| beast::Journal const | journal_ |
| uint16_t const | maxSelectedPeers_ |
Friends | |
| class | Slots< ClockType > |
Slot is associated with a specific validator via validator's public key.
Slot counts messages from a validator, selects peers to be the source of the messages, and communicates the peers to be squelched. Slot can be in the following states: 1) Counting. This is the peer selection state when Slot counts the messages and selects the peers; 2) Selected. Slot doesn't count messages in Selected state. A message received from unsquelched, disconnected peer, or idling peer may transition Slot to Counting state.
Definition at line 80 of file overlay/Slot.h.
|
private |
Definition at line 84 of file overlay/Slot.h.
|
private |
Definition at line 85 of file overlay/Slot.h.
|
private |
Definition at line 88 of file overlay/Slot.h.
|
private |
Constructor.
| journal | Journal for logging |
| handler | Squelch/Unsquelch implementation |
| maxSelectedPeers | the maximum number of peers to be selected as validator message source |
Definition at line 96 of file overlay/Slot.h.
|
private |
Update peer info.
If the message is from a new peer or from a previously expired squelched peer then switch the peer's and slot's state to Counting. If time of last selection round is > 2 * kMaxUnsquelchExpireDefault then switch the slot's state to Counting. If the number of messages for the peer is > kMinMessageThreshold then add peer to considered peers pool. If the number of considered peers who reached kMaxMessageThreshold is maxSelectedPeers_ then randomly select maxSelectedPeers_ from considered peers, and call squelch handler for each peer, which is not selected and not already in Squelched state. Set the state for those peers to Squelched and reset the count of all peers. Set slot's state to Selected. Message count is not updated when the slot is in Selected state.
| validator | Public key of the source validator |
| id | Peer id which received the message |
| type | Message type (Validation and Propose Set only, others are ignored, future use) |
| callback | A callback to report ignored squelches |
Definition at line 255 of file overlay/Slot.h.
|
private |
Handle peer deletion when a peer disconnects.
If the peer is in Selected state then call unsquelch handler for every peer in squelched state and reset every peer's state to Counting. Switch Slot's state to Counting.
| validator | Public key of the source validator |
| id | Deleted peer id |
| erase | If true then erase the peer. The peer is not erased when the peer when is idled. The peer is deleted when it disconnects |
Definition at line 403 of file overlay/Slot.h.
|
nodiscardprivate |
Get the time of the last peer selection round.
Definition at line 145 of file overlay/Slot.h.
|
nodiscardprivate |
Return number of peers in state.
Definition at line 471 of file overlay/Slot.h.
|
nodiscardprivate |
Return number of peers not in state.
Definition at line 479 of file overlay/Slot.h.
|
nodiscardprivate |
Return Slot's state.
Definition at line 160 of file overlay/Slot.h.
|
nodiscardprivate |
Return selected peers.
Definition at line 487 of file overlay/Slot.h.
|
nodiscardprivate |
Get peers info.
Return map of peer's state, count, squelch expiration milsec, and last message time milsec.
Definition at line 500 of file overlay/Slot.h.
|
private |
Check if peers stopped relaying messages.
If a peer is selected peer then call unsquelch handler for all currently squelched peers and switch the slot to Counting state.
| validator | Public key of the source validator |
Definition at line 233 of file overlay/Slot.h.
|
private |
Get random squelch duration between kMinUnsquelchExpire and min(max(kMaxUnsquelchExpireDefault, kSquelchPerPeer * npeers), kMaxUnsquelchExpirePeers).
| npeers | number of peers that can be squelched in the Slot |
Definition at line 389 of file overlay/Slot.h.
|
private |
Reset counts of peers in Selected or Counting state.
Definition at line 450 of file overlay/Slot.h.
|
private |
Initialize slot to Counting state.
Definition at line 461 of file overlay/Slot.h.
|
friend |
Definition at line 66 of file overlay/Slot.h.
|
private |
Definition at line 210 of file overlay/Slot.h.
|
private |
Definition at line 214 of file overlay/Slot.h.
|
private |
Definition at line 217 of file overlay/Slot.h.
|
private |
Definition at line 220 of file overlay/Slot.h.
|
private |
Definition at line 222 of file overlay/Slot.h.
|
private |
Definition at line 223 of file overlay/Slot.h.
|
private |
Definition at line 224 of file overlay/Slot.h.
|
private |
Definition at line 228 of file overlay/Slot.h.