Safe Haskell | None |
---|---|
Language | Haskell2010 |
Ouroboros.Network.PeerSelection
Synopsis
- data PeerSelectionActions extraState extraFlags extraPeers extraAPI extraCounters peeraddr peerconn (m :: Type -> Type)
- data PeerSelectionTargets = PeerSelectionTargets {}
- data PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn
- data PeerSelectionInterfaces extraState extraFlags extraPeers extraCounters peeraddr peerconn (m :: Type -> Type) = PeerSelectionInterfaces {
- countersVar :: StrictTVar m (PeerSelectionCounters extraCounters)
- publicStateVar :: StrictTVar m (PublicPeerSelectionState peeraddr)
- debugStateVar :: StrictTVar m (PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn)
- readUseLedgerPeers :: STM m UseLedgerPeers
- data DebugPeerSelection extraState extraFlags extraPeers peeraddr where
- TraceGovernorState :: forall extraState extraFlags extraPeers peeraddr peerconn. Show peerconn => Time -> Maybe DiffTime -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> DebugPeerSelection extraState extraFlags extraPeers peeraddr
- data PeerStateActions peeraddr peerconn (m :: Type -> Type)
- data PeerSelectionPolicy peeraddr (m :: Type -> Type) = PeerSelectionPolicy {
- policyPickKnownPeersForPeerShare :: PickPolicy peeraddr (STM m)
- policyPickColdPeersToPromote :: PickPolicy peeraddr (STM m)
- policyPickWarmPeersToPromote :: PickPolicy peeraddr (STM m)
- policyPickHotPeersToDemote :: PickPolicy peeraddr (STM m)
- policyPickWarmPeersToDemote :: PickPolicy peeraddr (STM m)
- policyPickColdPeersToForget :: PickPolicy peeraddr (STM m)
- policyPickInboundPeers :: PickPolicy peeraddr (STM m)
- policyFindPublicRootTimeout :: !DiffTime
- policyMaxInProgressPeerShareReqs :: !Int
- policyPeerShareRetryTime :: !DiffTime
- policyPeerShareBatchWaitTime :: !DiffTime
- policyPeerShareOverallTimeout :: !DiffTime
- policyPeerShareActivationDelay :: !DiffTime
- policyErrorDelay :: !DiffTime
- type PickPolicy peeraddr (m :: Type -> Type) = (peeraddr -> PeerSource) -> (peeraddr -> Int) -> (peeraddr -> Bool) -> Set peeraddr -> Int -> m (Set peeraddr)
- module Ouroboros.Network.PeerSelection.Types
- module Ouroboros.Network.PeerSelection.Types
- data PublicRootPeers extraPeers peeraddr
- module Ouroboros.Network.PeerSelection.PeerStateActions
- module Ouroboros.Network.PeerSelection.PeerSelectionActions
- module Ouroboros.Network.PeerSelection.RelayAccessPoint
- data AfterSlot
- data IsBigLedgerPeer
- data LedgerPeerSnapshot where
- LedgerPeerSnapshotV2 (WithOrigin SlotNo, [(AccPoolStake, (PoolStake, NonEmpty RelayAccessPoint))])
- pattern LedgerPeerSnapshot :: (WithOrigin SlotNo, [(AccPoolStake, (PoolStake, NonEmpty RelayAccessPoint))]) -> LedgerPeerSnapshot
- data LedgerPeersConsensusInterface extraAPI (m :: Type -> Type) = LedgerPeersConsensusInterface {
- lpGetLatestSlot :: STM m (WithOrigin SlotNo)
- lpGetLedgerPeers :: STM m [(PoolStake, NonEmpty RelayAccessPoint)]
- lpExtraAPI :: extraAPI
- data LedgerPeersKind
- data UseLedgerPeers
- data LedgerPeers
- newtype NumberOfPeers = NumberOfPeers {}
- data TraceLedgerPeers
- = PickedBigLedgerPeer RelayAccessPoint AccPoolStake PoolStake
- | PickedLedgerPeer RelayAccessPoint AccPoolStake PoolStake
- | PickedBigLedgerPeers NumberOfPeers [RelayAccessPoint]
- | PickedLedgerPeers NumberOfPeers [RelayAccessPoint]
- | FetchingNewLedgerState Int Int
- | TraceLedgerPeersDomains [RelayAccessPoint]
- | DisabledLedgerPeers
- | TraceUseLedgerPeers UseLedgerPeers
- | WaitingOnRequest
- | RequestForPeers NumberOfPeers
- | ReusingLedgerState Int DiffTime
- | FallingBackToPublicRootPeers
- | NotEnoughBigLedgerPeers NumberOfPeers Int
- | NotEnoughLedgerPeers NumberOfPeers Int
- | UsingBigLedgerPeerSnapshot
- data WithLedgerPeersArgs extraAPI (m :: Type -> Type) = WithLedgerPeersArgs {}
- withLedgerPeers :: forall peerAddr resolver exception extraAPI m a. (MonadAsync m, MonadThrow m, MonadMonotonicTime m, Exception exception, Ord peerAddr) => PeerActionsDNS peerAddr resolver exception m -> WithLedgerPeersArgs extraAPI m -> ((NumberOfPeers -> LedgerPeersKind -> m (Maybe (Set peerAddr, DiffTime))) -> Async m Void -> m a) -> m a
- data ReportPeerMetrics (m :: Type -> Type) peerAddr = ReportPeerMetrics {
- reportHeader :: Tracer (STM m) (TraceLabelPeer peerAddr (SlotNo, Time))
- reportFetch :: Tracer (STM m) (TraceLabelPeer peerAddr (SizeInBytes, SlotNo, Time))
- data PeerMetrics (m :: Type -> Type) p
- newtype PeerMetricsConfiguration = PeerMetricsConfiguration {}
- newPeerMetric :: (MonadLabelledSTM m, NoThunks p, NFData p) => PeerMetricsConfiguration -> m (PeerMetrics m p)
- newPeerMetric' :: (MonadLabelledSTM m, NoThunks p, NFData p) => SlotMetric p -> SlotMetric (p, SizeInBytes) -> PeerMetricsConfiguration -> m (PeerMetrics m p)
- nullMetric :: forall (m :: Type -> Type) p. MonadSTM m => ReportPeerMetrics m p
- reportMetric :: forall (m :: Type -> Type) p. (MonadSTM m, Ord p) => PeerMetricsConfiguration -> PeerMetrics m p -> ReportPeerMetrics m (ConnectionId p)
- module Ouroboros.Network.PeerSelection.Churn
- module Ouroboros.Network.PeerSelection.PeerAdvertise
- module Ouroboros.Network.PeerSelection.PeerSharing
Documentation
data PeerSelectionActions extraState extraFlags extraPeers extraAPI extraCounters peeraddr peerconn (m :: Type -> Type) Source #
data PeerSelectionTargets Source #
Adjustable targets for the peer selection mechanism.
These are used by the peer selection governor as targets. They are used by the peer churn governor loop as knobs to adjust, to influence the peer selection governor.
The known, established and active peer targets are targets both from below and from above: the governor will attempt to grow or shrink the sets to hit these targets.
Unlike the other targets, the root peer target is "one sided", it is only a target from below. The governor does not try to shrink the root set to hit it, it simply stops looking for more.
There is also an implicit target that enough local root peers are selected as active. This comes from the configuration for local roots, and is not an independently adjustable target.
Constructors
PeerSelectionTargets | |
Fields
|
Instances
Show PeerSelectionTargets Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec :: Int -> PeerSelectionTargets -> ShowS # show :: PeerSelectionTargets -> String # showList :: [PeerSelectionTargets] -> ShowS # | |
Eq PeerSelectionTargets Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods (==) :: PeerSelectionTargets -> PeerSelectionTargets -> Bool # (/=) :: PeerSelectionTargets -> PeerSelectionTargets -> Bool # |
data PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn Source #
The internal state used by the peerSelectionGovernor
.
The local and public root sets are disjoint, and their union is the overall root set.
Documentation of individual fields describes some of the invariants these
structures should maintain. For the entire picture, see
assertPeerSelectionState
.
Instances
(Ord peeraddr, Show extraFlags, Show peeraddr, Show extraPeers, Show peerconn, Show extraState) => Show (PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn) Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec :: Int -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> ShowS # show :: PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> String # showList :: [PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn] -> ShowS # |
data PeerSelectionInterfaces extraState extraFlags extraPeers extraCounters peeraddr peerconn (m :: Type -> Type) Source #
Interfaces required by the peer selection governor, which do not need to
be shared with actions and thus are not part of PeerSelectionActions
.
Constructors
PeerSelectionInterfaces | |
Fields
|
data DebugPeerSelection extraState extraFlags extraPeers peeraddr where Source #
Constructors
TraceGovernorState :: forall extraState extraFlags extraPeers peeraddr peerconn. Show peerconn => Time -> Maybe DiffTime -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> DebugPeerSelection extraState extraFlags extraPeers peeraddr |
Instances
(Show extraState, Show extraFlags, Show extraPeers, Ord peeraddr, Show peeraddr) => Show (DebugPeerSelection extraState extraFlags extraPeers peeraddr) Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec :: Int -> DebugPeerSelection extraState extraFlags extraPeers peeraddr -> ShowS # show :: DebugPeerSelection extraState extraFlags extraPeers peeraddr -> String # showList :: [DebugPeerSelection extraState extraFlags extraPeers peeraddr] -> ShowS # |
data PeerStateActions peeraddr peerconn (m :: Type -> Type) Source #
Callbacks which are performed to change peer state.
data PeerSelectionPolicy peeraddr (m :: Type -> Type) Source #
Constructors
type PickPolicy peeraddr (m :: Type -> Type) = (peeraddr -> PeerSource) -> (peeraddr -> Int) -> (peeraddr -> Bool) -> Set peeraddr -> Int -> m (Set peeraddr) Source #
A peer pick policy is an action that picks a subset of elements from a map of peers.
The pre-condition is that the map of available choices will be non-empty, and the requested number to pick will be strictly positive.
The post-condition is that the picked set is non-empty but must not be bigger than the requested number.
Peer selection API is using `STM m` monad, internally it is using m
.
data PublicRootPeers extraPeers peeraddr Source #
Public Root Peers consist of either a set of manually configured bootstrap peers.
There's an implicit precedence that will priorise bootstrap peers over the other sets, so if we are adding a bootstrap peer and that peer is already a member of other public root set, it is going to be removed from that set and added to the bootstrap peer set.
Instances
Only use the ledger after the given slot number.
Instances
data IsBigLedgerPeer #
A boolean like type. Big ledger peers are the largest SPOs which control 90% of staked stake.
Note that IsBigLedgerPeer
indicates a role that peer plays in the eclipse
evasion, e.g. that a peer was explicitly selected as a big ledger peer, e.g.
IsNotBigLedgerPeer
does not necessarily mean that the peer isn't a big
ledger peer. This is because we select root peers from all ledger peers
(including big ones).
Constructors
IsBigLedgerPeer | |
IsNotBigLedgerPeer |
Instances
Eq IsBigLedgerPeer | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods (==) :: IsBigLedgerPeer -> IsBigLedgerPeer -> Bool # (/=) :: IsBigLedgerPeer -> IsBigLedgerPeer -> Bool # |
data LedgerPeerSnapshot #
The type of big ledger peers that is serialised or later provided by node configuration for the networking layer to connect to when syncing.
Constructors
LedgerPeerSnapshotV2 (WithOrigin SlotNo, [(AccPoolStake, (PoolStake, NonEmpty RelayAccessPoint))]) | Internal use for version 2, use pattern synonym for public API |
Bundled Patterns
pattern LedgerPeerSnapshot :: (WithOrigin SlotNo, [(AccPoolStake, (PoolStake, NonEmpty RelayAccessPoint))]) -> LedgerPeerSnapshot | Public API to access snapshot data. Currently access to only most recent version is available. Nonetheless, serialisation from the node into JSON is supported for older versions via internal api so that newer CLI can still support older node formats. |
Instances
FromJSON LedgerPeerSnapshot | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods parseJSON :: Value -> Parser LedgerPeerSnapshot # parseJSONList :: Value -> Parser [LedgerPeerSnapshot] # | |
ToJSON LedgerPeerSnapshot | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods toJSON :: LedgerPeerSnapshot -> Value # toEncoding :: LedgerPeerSnapshot -> Encoding # toJSONList :: [LedgerPeerSnapshot] -> Value # toEncodingList :: [LedgerPeerSnapshot] -> Encoding # omitField :: LedgerPeerSnapshot -> Bool # | |
FromCBOR LedgerPeerSnapshot | |
ToCBOR LedgerPeerSnapshot | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods toCBOR :: LedgerPeerSnapshot -> Encoding # encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy LedgerPeerSnapshot -> Size # encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy [LedgerPeerSnapshot] -> Size # | |
Show LedgerPeerSnapshot | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods showsPrec :: Int -> LedgerPeerSnapshot -> ShowS # show :: LedgerPeerSnapshot -> String # showList :: [LedgerPeerSnapshot] -> ShowS # | |
Eq LedgerPeerSnapshot | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods (==) :: LedgerPeerSnapshot -> LedgerPeerSnapshot -> Bool # (/=) :: LedgerPeerSnapshot -> LedgerPeerSnapshot -> Bool # |
data LedgerPeersConsensusInterface extraAPI (m :: Type -> Type) #
Return ledger state information and ledger peers.
Constructors
LedgerPeersConsensusInterface | |
Fields
|
data LedgerPeersKind #
Which ledger peers to pick.
Constructors
AllLedgerPeers | |
BigLedgerPeers |
Instances
Show LedgerPeersKind | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods showsPrec :: Int -> LedgerPeersKind -> ShowS # show :: LedgerPeersKind -> String # showList :: [LedgerPeersKind] -> ShowS # |
data UseLedgerPeers #
Only use the ledger after the given slot number.
Constructors
DontUseLedgerPeers | |
UseLedgerPeers AfterSlot |
Instances
Generic UseLedgerPeers | |||||
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Associated Types
Methods from :: UseLedgerPeers -> Rep UseLedgerPeers x # to :: Rep UseLedgerPeers x -> UseLedgerPeers # | |||||
Show UseLedgerPeers | |||||
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods showsPrec :: Int -> UseLedgerPeers -> ShowS # show :: UseLedgerPeers -> String # showList :: [UseLedgerPeers] -> ShowS # | |||||
Eq UseLedgerPeers | |||||
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods (==) :: UseLedgerPeers -> UseLedgerPeers -> Bool # (/=) :: UseLedgerPeers -> UseLedgerPeers -> Bool # | |||||
NoThunks UseLedgerPeers | |||||
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type Methods noThunks :: Context -> UseLedgerPeers -> IO (Maybe ThunkInfo) # wNoThunks :: Context -> UseLedgerPeers -> IO (Maybe ThunkInfo) # showTypeOf :: Proxy UseLedgerPeers -> String # | |||||
type Rep UseLedgerPeers | |||||
Defined in Ouroboros.Network.PeerSelection.LedgerPeers.Type type Rep UseLedgerPeers = D1 ('MetaData "UseLedgerPeers" "Ouroboros.Network.PeerSelection.LedgerPeers.Type" "ouroboros-network-api-0.13.0.0-inplace" 'False) (C1 ('MetaCons "DontUseLedgerPeers" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "UseLedgerPeers" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 AfterSlot))) |
data LedgerPeers Source #
Ledger Peer request result
Constructors
LedgerPeers [(PoolStake, NonEmpty RelayAccessPoint)] | Ledger peers |
BeforeSlot | No result because the node is still before the configured UseLedgerAfter slot number |
Instances
Show LedgerPeers Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers Methods showsPrec :: Int -> LedgerPeers -> ShowS # show :: LedgerPeers -> String # showList :: [LedgerPeers] -> ShowS # | |
Eq LedgerPeers Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers |
newtype NumberOfPeers Source #
Number of peers to pick.
Constructors
NumberOfPeers | |
Fields |
Instances
Show NumberOfPeers Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers Methods showsPrec :: Int -> NumberOfPeers -> ShowS # show :: NumberOfPeers -> String # showList :: [NumberOfPeers] -> ShowS # |
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 [RelayAccessPoint] | |
DisabledLedgerPeers | Trace for when getting peers from the ledger is disabled, that is DontUseLedgerPeers. |
TraceUseLedgerPeers UseLedgerPeers | Trace UseLedgerPeers value |
WaitingOnRequest | |
RequestForPeers NumberOfPeers | |
ReusingLedgerState Int DiffTime | |
FallingBackToPublicRootPeers | |
NotEnoughBigLedgerPeers NumberOfPeers Int | |
NotEnoughLedgerPeers NumberOfPeers Int | |
UsingBigLedgerPeerSnapshot |
Instances
Show TraceLedgerPeers Source # | |
Defined in Ouroboros.Network.PeerSelection.LedgerPeers Methods showsPrec :: Int -> TraceLedgerPeers -> ShowS # show :: TraceLedgerPeers -> String # showList :: [TraceLedgerPeers] -> ShowS # |
data WithLedgerPeersArgs extraAPI (m :: Type -> Type) Source #
Argument record for withLedgerPeers
Constructors
WithLedgerPeersArgs | |
Fields
|
withLedgerPeers :: forall peerAddr resolver exception extraAPI m a. (MonadAsync m, MonadThrow m, MonadMonotonicTime m, Exception exception, Ord peerAddr) => PeerActionsDNS peerAddr resolver exception m -> WithLedgerPeersArgs extraAPI 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.
data ReportPeerMetrics (m :: Type -> Type) peerAddr #
Constructors
ReportPeerMetrics | |
Fields
|
newtype PeerMetricsConfiguration Source #
Constructors
PeerMetricsConfiguration | |
Fields
|
Instances
NFData PeerMetricsConfiguration Source # | |||||
Defined in Ouroboros.Network.PeerSelection.PeerMetric Methods rnf :: PeerMetricsConfiguration -> () # | |||||
Generic PeerMetricsConfiguration Source # | |||||
Defined in Ouroboros.Network.PeerSelection.PeerMetric Associated Types
Methods from :: PeerMetricsConfiguration -> Rep PeerMetricsConfiguration x # to :: Rep PeerMetricsConfiguration x -> PeerMetricsConfiguration # | |||||
Show PeerMetricsConfiguration Source # | |||||
Defined in Ouroboros.Network.PeerSelection.PeerMetric Methods showsPrec :: Int -> PeerMetricsConfiguration -> ShowS # show :: PeerMetricsConfiguration -> String # showList :: [PeerMetricsConfiguration] -> ShowS # | |||||
NoThunks PeerMetricsConfiguration Source # | |||||
Defined in Ouroboros.Network.PeerSelection.PeerMetric | |||||
type Rep PeerMetricsConfiguration Source # | |||||
Defined in Ouroboros.Network.PeerSelection.PeerMetric type Rep PeerMetricsConfiguration = D1 ('MetaData "PeerMetricsConfiguration" "Ouroboros.Network.PeerSelection.PeerMetric" "ouroboros-network-0.20.0.0-inplace" 'True) (C1 ('MetaCons "PeerMetricsConfiguration" 'PrefixI 'True) (S1 ('MetaSel ('Just "maxEntriesToTrack") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int))) |
newPeerMetric :: (MonadLabelledSTM m, NoThunks p, NFData p) => PeerMetricsConfiguration -> m (PeerMetrics m p) Source #
newPeerMetric' :: (MonadLabelledSTM m, NoThunks p, NFData p) => SlotMetric p -> SlotMetric (p, SizeInBytes) -> PeerMetricsConfiguration -> m (PeerMetrics m p) Source #
nullMetric :: forall (m :: Type -> Type) p. MonadSTM m => ReportPeerMetrics m p Source #
reportMetric :: forall (m :: Type -> Type) p. (MonadSTM m, Ord p) => PeerMetricsConfiguration -> PeerMetrics m p -> ReportPeerMetrics m (ConnectionId p) Source #