Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Ouroboros.Network.PeerSelection.State.KnownPeers
Synopsis
- data KnownPeers peeraddr
- invariant :: Ord peeraddr => KnownPeers peeraddr -> Bool
- empty :: KnownPeers peeraddr
- size :: KnownPeers peeraddr -> Int
- insert :: Ord peeraddr => Map peeraddr (Maybe PeerSharing, Maybe PeerAdvertise, Maybe IsLedgerPeer) -> KnownPeers peeraddr -> KnownPeers peeraddr
- delete :: Ord peeraddr => Set peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr
- toSet :: KnownPeers peeraddr -> Set peeraddr
- member :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool
- setCurrentTime :: Ord peeraddr => Time -> KnownPeers peeraddr -> KnownPeers peeraddr
- incrementFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> (Int, KnownPeers peeraddr)
- resetFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr
- lookupFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Maybe Int
- lookupTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Maybe Bool
- setTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr
- clearTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr
- minConnectTime :: Ord peeraddr => KnownPeers peeraddr -> (peeraddr -> Bool) -> Maybe Time
- setConnectTimes :: Ord peeraddr => Map peeraddr Time -> KnownPeers peeraddr -> KnownPeers peeraddr
- availableToConnect :: KnownPeers peeraddr -> Set peeraddr
- canPeerShareRequest :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool
- getPeerSharingRequestPeers :: Ord peeraddr => Set peeraddr -> KnownPeers peeraddr -> Set peeraddr
- canSharePeers :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool
- getPeerSharingResponsePeers :: KnownPeers peeraddr -> Set peeraddr
- isKnownLedgerPeer :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool
Types
data KnownPeers peeraddr Source #
The set of known peers. To a first approximation it can be thought of as
a Set
of peeraddr
.
It has one special feature:
- It tracks the subset of peers that we are happy to publish in reply to peer share requests to our node. It supports random sampling from this set.
Instances
Show peeraddr => Show (KnownPeers peeraddr) Source # | |
Ord peeraddr => Eq (KnownPeers peeraddr) Source # | |
Defined in Ouroboros.Network.PeerSelection.State.KnownPeers Methods (==) :: KnownPeers peeraddr -> KnownPeers peeraddr -> Bool Source # (/=) :: KnownPeers peeraddr -> KnownPeers peeraddr -> Bool Source # |
Basic container operations
empty :: KnownPeers peeraddr Source #
size :: KnownPeers peeraddr -> Int Source #
insert :: Ord peeraddr => Map peeraddr (Maybe PeerSharing, Maybe PeerAdvertise, Maybe IsLedgerPeer) -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
delete :: Ord peeraddr => Set peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
toSet :: KnownPeers peeraddr -> Set peeraddr Source #
O(n)
Special operations
setCurrentTime :: Ord peeraddr => Time -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
incrementFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> (Int, KnownPeers peeraddr) Source #
resetFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
lookupFailCount :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Maybe Int Source #
lookupTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Maybe Bool Source #
setTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
clearTepidFlag :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
Tracking when we can (re)connect
Arguments
:: Ord peeraddr | |
=> KnownPeers peeraddr | |
-> (peeraddr -> Bool) | a predicate which describes the peers to take into account |
-> Maybe Time |
setConnectTimes :: Ord peeraddr => Map peeraddr Time -> KnownPeers peeraddr -> KnownPeers peeraddr Source #
availableToConnect :: KnownPeers peeraddr -> Set peeraddr Source #
The subset of known peers that we would be allowed to try to establish a connection to now. This is because we have not connected with them before or because any failure backoff time has expired.
Selecting peers to ask
canPeerShareRequest :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #
getPeerSharingRequestPeers :: Ord peeraddr => Set peeraddr -> KnownPeers peeraddr -> Set peeraddr Source #
Filter peers available for Peer Sharing requests, according to their
PeerSharing
information
Selecting peers to share
canSharePeers :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #
getPeerSharingResponsePeers :: KnownPeers peeraddr -> Set peeraddr Source #
Filter peers available for Peer Sharing replies, according to their
PeerAdvertise
information
Filtering ledger peers
isKnownLedgerPeer :: Ord peeraddr => peeraddr -> KnownPeers peeraddr -> Bool Source #
Select a random subset of the known peers that are available to publish.
The selection is done in such a way that when the same initial PRNG state is used, the selected set does not significantly vary with small perturbations in the set of published peers.
The intention of this selection method is that the selection should give approximately the same replies to the same peers over the course of multiple requests from the same peer. This is to deliberately slow the rate at which peers can discover and map out the entire network.
Checks the KnownPeers Set for known ledger peers.
This is used in Peer Selection Governor to filter out the known-to-te ledger peers from the share result set.