Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Ouroboros.Network.PeerSelection.LedgerPeers
Synopsis
- data UseLedgerAfter
- = DontUseLedger
- | UseLedgerAfter SlotNo
- data IsLedgerPeer
- newtype NumberOfPeers = NumberOfPeers {}
- newtype LedgerPeersConsensusInterface m = LedgerPeersConsensusInterface {
- lpGetPeers :: SlotNo -> STM m (Maybe [(PoolStake, NonEmpty RelayAccessPoint)])
- data LedgerPeersKind
- accPoolStake :: [(PoolStake, NonEmpty RelayAccessPoint)] -> Map AccPoolStake (PoolStake, NonEmpty RelayAccessPoint)
- accBigPoolStake :: [(PoolStake, NonEmpty RelayAccessPoint)] -> Map AccPoolStake (PoolStake, NonEmpty RelayAccessPoint)
- bigLedgerPeerQuota :: AccPoolStake
- withLedgerPeers :: forall peerAddr resolver exception m a. (MonadAsync m, MonadThrow m, MonadMonotonicTime m, Exception exception, Ord peerAddr) => StdGen -> DNSSemaphore m -> (IP -> PortNumber -> peerAddr) -> Tracer m TraceLedgerPeers -> STM m UseLedgerAfter -> LedgerPeersConsensusInterface m -> DNSActions resolver exception m -> ((NumberOfPeers -> LedgerPeersKind -> m (Maybe (Set peerAddr, DiffTime))) -> Async m Void -> m a) -> m a
- data UseLedgerAfter
- = DontUseLedger
- | UseLedgerAfter SlotNo
- isLedgerPeersEnabled :: UseLedgerAfter -> Bool
- newtype NumberOfPeers = NumberOfPeers {}
- data IsLedgerPeer
- data TraceLedgerPeers
- = PickedBigLedgerPeer RelayAccessPoint AccPoolStake PoolStake
- | PickedLedgerPeer RelayAccessPoint AccPoolStake PoolStake
- | PickedBigLedgerPeers NumberOfPeers [RelayAccessPoint]
- | PickedLedgerPeers NumberOfPeers [RelayAccessPoint]
- | FetchingNewLedgerState Int Int
- | TraceLedgerPeersDomains [DomainAccessPoint]
- | TraceLedgerPeersResult Domain [(IP, TTL)]
- | TraceLedgerPeersFailure Domain DNSError
- | DisabledLedgerPeers
- | TraceUseLedgerAfter UseLedgerAfter
- | WaitingOnRequest
- | RequestForPeers NumberOfPeers
- | ReusingLedgerState Int DiffTime
- | FallingBackToPublicRootPeers
- | NotEnoughBigLedgerPeers NumberOfPeers Int
- | NotEnoughLedgerPeers NumberOfPeers Int
- resolveLedgerPeers :: forall m peerAddr resolver exception. (Ord peerAddr, MonadThrow m, MonadAsync m, Exception exception) => Tracer m TraceLedgerPeers -> (IP -> PortNumber -> peerAddr) -> DNSSemaphore m -> ResolvConf -> DNSActions resolver exception m -> [DomainAccessPoint] -> m (Map DomainAccessPoint (Set peerAddr))
Ledger Peers specific data types
data UseLedgerAfter Source #
Only use the ledger after the given slot number.
Constructors
DontUseLedger | |
UseLedgerAfter SlotNo |
Instances
Show UseLedgerAfter Source # | |
Eq UseLedgerAfter Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Common Methods (==) :: UseLedgerAfter -> UseLedgerAfter -> Bool Source # (/=) :: UseLedgerAfter -> UseLedgerAfter -> Bool Source # |
data IsLedgerPeer Source #
Identifies a peer as coming from ledger or not
Constructors
IsLedgerPeer | a ledger peer. |
IsNotLedgerPeer |
Instances
Show IsLedgerPeer Source # | |
Eq IsLedgerPeer Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Common Methods (==) :: IsLedgerPeer -> IsLedgerPeer -> Bool Source # (/=) :: IsLedgerPeer -> IsLedgerPeer -> Bool Source # |
newtype NumberOfPeers Source #
Constructors
NumberOfPeers | |
Fields |
Instances
newtype LedgerPeersConsensusInterface m Source #
Constructors
LedgerPeersConsensusInterface | |
Fields
|
data LedgerPeersKind Source #
Which ledger peers to pick.
Constructors
AllLedgerPeers | |
BigLedgerPeers |
Instances
Ledger Peers specific functions
accPoolStake :: [(PoolStake, NonEmpty RelayAccessPoint)] -> Map AccPoolStake (PoolStake, NonEmpty RelayAccessPoint) Source #
Convert a list of pools with stake to a Map keyed on the accumulated stake.
Consensus provides a list of pairs of relative stake and corresponding relays for all usable
registered pools.
By creating a Map keyed on the AccPoolStake
that is the sum of the pool's relative stake and
the stake of all preceding pools we can support weighted random selection in
O(log n) time by taking advantage of Map.lookupGE (returns the smallest key greater or equal
to the provided value).
accBigPoolStake :: [(PoolStake, NonEmpty RelayAccessPoint)] -> Map AccPoolStake (PoolStake, NonEmpty RelayAccessPoint) Source #
Convert a list of pools with stake to a Map keyed on the accumulated stake which only contains big ledger peers, e.g. largest ledger peers which cumulatively control 90% of stake.
bigLedgerPeerQuota :: AccPoolStake Source #
The total accumulated stake of big ledger peers.
DNS based provider for ledger root peers
withLedgerPeers :: forall peerAddr resolver exception m a. (MonadAsync m, MonadThrow m, MonadMonotonicTime m, Exception exception, Ord peerAddr) => StdGen -> DNSSemaphore m -> (IP -> PortNumber -> peerAddr) -> Tracer m TraceLedgerPeers -> STM m UseLedgerAfter -> LedgerPeersConsensusInterface m -> DNSActions resolver exception m -> ((NumberOfPeers -> LedgerPeersKind -> m (Maybe (Set peerAddr, DiffTime))) -> Async m Void -> m a) -> m a Source #
For a LedgerPeers worker thread and submit request and receive responses.
Re-exports
data UseLedgerAfter Source #
Only use the ledger after the given slot number.
Constructors
DontUseLedger | |
UseLedgerAfter SlotNo |
Instances
Show UseLedgerAfter Source # | |
Eq UseLedgerAfter Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Common Methods (==) :: UseLedgerAfter -> UseLedgerAfter -> Bool Source # (/=) :: UseLedgerAfter -> UseLedgerAfter -> Bool Source # |
newtype NumberOfPeers Source #
Constructors
NumberOfPeers | |
Fields |
Instances
data IsLedgerPeer Source #
Identifies a peer as coming from ledger or not
Constructors
IsLedgerPeer | a ledger peer. |
IsNotLedgerPeer |
Instances
Show IsLedgerPeer Source # | |
Eq IsLedgerPeer Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Common Methods (==) :: IsLedgerPeer -> IsLedgerPeer -> Bool Source # (/=) :: IsLedgerPeer -> IsLedgerPeer -> Bool Source # |
data TraceLedgerPeers Source #
Trace LedgerPeers events.
Constructors
PickedBigLedgerPeer RelayAccessPoint AccPoolStake PoolStake | Trace for a significant ledger peer picked with accumulated and relative stake of its pool. |
PickedLedgerPeer RelayAccessPoint AccPoolStake PoolStake | Trace for a ledger peer picked with accumulated and relative stake of its pool. |
PickedBigLedgerPeers NumberOfPeers [RelayAccessPoint] | |
PickedLedgerPeers NumberOfPeers [RelayAccessPoint] | Trace for the number of peers and we wanted to pick and the list of peers picked. |
FetchingNewLedgerState Int Int | Trace for fetching a new list of peers from the ledger. The first Int is the number of ledger peers returned the latter is the number of big ledger peers. |
TraceLedgerPeersDomains [DomainAccessPoint] | |
TraceLedgerPeersResult Domain [(IP, TTL)] | |
TraceLedgerPeersFailure Domain DNSError | |
DisabledLedgerPeers | Trace for when getting peers from the ledger is disabled, that is DontUseLedger. |
TraceUseLedgerAfter UseLedgerAfter | Trace UseLedgerAfter value |
WaitingOnRequest | |
RequestForPeers NumberOfPeers | |
ReusingLedgerState Int DiffTime | |
FallingBackToPublicRootPeers | |
NotEnoughBigLedgerPeers NumberOfPeers Int | |
NotEnoughLedgerPeers NumberOfPeers Int |
Instances
Internal only exported for testing purposes
resolveLedgerPeers :: forall m peerAddr resolver exception. (Ord peerAddr, MonadThrow m, MonadAsync m, Exception exception) => Tracer m TraceLedgerPeers -> (IP -> PortNumber -> peerAddr) -> DNSSemaphore m -> ResolvConf -> DNSActions resolver exception m -> [DomainAccessPoint] -> m (Map DomainAccessPoint (Set peerAddr)) Source #
Provides DNS resolution functionality.
Concurrently resolve DNS names, respecting the maxDNSConcurrency
limit.