Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Ouroboros.Network.PeerSelection.Governor.Types
Synopsis
- data PeerSelectionPolicy peeraddr m = 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)
- policyFindPublicRootTimeout ∷ !DiffTime
- policyMaxInProgressPeerShareReqs ∷ !Int
- policyPeerShareRetryTime ∷ !DiffTime
- policyPeerShareBatchWaitTime ∷ !DiffTime
- policyPeerShareOverallTimeout ∷ !DiffTime
- policyErrorDelay ∷ !DiffTime
- data PeerSelectionTargets = PeerSelectionTargets {}
- nullPeerSelectionTargets ∷ PeerSelectionTargets
- sanePeerSelectionTargets ∷ PeerSelectionTargets → Bool
- type PickPolicy peeraddr m = (peeraddr → PeerSource) → (peeraddr → Int) → (peeraddr → Bool) → Set peeraddr → Int → m (Set peeraddr)
- pickPeers ∷ (Ord peeraddr, Functor m) ⇒ PeerSelectionState peeraddr peerconn → PickPolicy peeraddr m → Set peeraddr → Int → m (Set peeraddr)
- data PeerStateActions peeraddr peerconn m = PeerStateActions {
- monitorPeerConnection ∷ peerconn → STM m (PeerStatus, Maybe ReconnectDelay)
- establishPeerConnection ∷ IsBigLedgerPeer → peeraddr → m peerconn
- activatePeerConnection ∷ IsBigLedgerPeer → peerconn → m ()
- deactivatePeerConnection ∷ peerconn → m ()
- closePeerConnection ∷ peerconn → m ()
- data PeerSelectionActions peeraddr peerconn m = PeerSelectionActions {
- readPeerSelectionTargets ∷ STM m PeerSelectionTargets
- readLocalRootPeers ∷ STM m [(HotValency, WarmValency, Map peeraddr PeerAdvertise)]
- readNewInboundConnection ∷ STM m (peeraddr, PeerSharing)
- peerSharing ∷ PeerSharing
- peerConnToPeerSharing ∷ peerconn → PeerSharing
- requestPublicRootPeers ∷ Int → m (Map peeraddr (PeerAdvertise, IsLedgerPeer), DiffTime)
- requestBigLedgerPeers ∷ Int → m (Set peeraddr, DiffTime)
- requestPeerShare ∷ PeerSharingAmount → peeraddr → m (PeerSharingResult peeraddr)
- peerStateActions ∷ PeerStateActions peeraddr peerconn m
- data ChurnMode
- data PeerSelectionState peeraddr peerconn = PeerSelectionState {
- targets ∷ !PeerSelectionTargets
- localRootPeers ∷ !(LocalRootPeers peeraddr)
- publicRootPeers ∷ !(Set peeraddr)
- bigLedgerPeers ∷ !(Set peeraddr)
- knownPeers ∷ !(KnownPeers peeraddr)
- establishedPeers ∷ !(EstablishedPeers peeraddr peerconn)
- activePeers ∷ !(Set peeraddr)
- publicRootBackoffs ∷ !Int
- publicRootRetryTime ∷ !Time
- inProgressPublicRootsReq ∷ !Bool
- bigLedgerPeerBackoffs ∷ !Int
- bigLedgerPeerRetryTime ∷ !Time
- inProgressBigLedgerPeersReq ∷ !Bool
- inProgressPeerShareReqs ∷ !Int
- inProgressPromoteCold ∷ !(Set peeraddr)
- inProgressPromoteWarm ∷ !(Set peeraddr)
- inProgressDemoteWarm ∷ !(Set peeraddr)
- inProgressDemoteHot ∷ !(Set peeraddr)
- inProgressDemoteToCold ∷ !(Set peeraddr)
- fuzzRng ∷ !StdGen
- countersCache ∷ !(Cache PeerSelectionCounters)
- emptyPeerSelectionState ∷ StdGen → [(Int, Int)] → PeerSelectionState peeraddr peerconn
- assertPeerSelectionState ∷ Ord peeraddr ⇒ PeerSelectionState peeraddr peerconn → a → a
- establishedPeersStatus ∷ Ord peeraddr ⇒ PeerSelectionState peeraddr peerconn → Map peeraddr PeerStatus
- newtype PublicPeerSelectionState peeraddr = PublicPeerSelectionState {
- availableToShare ∷ Set peeraddr
- emptyPublicPeerSelectionState ∷ Ord peeraddr ⇒ PublicPeerSelectionState peeraddr
- toPublicState ∷ PeerSelectionState peeraddr peerconn → PublicPeerSelectionState peeraddr
- data Guarded m a where
- data Decision m peeraddr peerconn = Decision {
- decisionTrace ∷ [TracePeerSelection peeraddr]
- decisionState ∷ PeerSelectionState peeraddr peerconn
- decisionJobs ∷ [Job () m (Completion m peeraddr peerconn)]
- type TimedDecision m peeraddr peerconn = Time → Decision m peeraddr peerconn
- type MkGuardedDecision peeraddr peerconn m = PeerSelectionPolicy peeraddr m → PeerSelectionState peeraddr peerconn → Guarded (STM m) (TimedDecision m peeraddr peerconn)
- newtype Completion m peeraddr peerconn = Completion (PeerSelectionState peeraddr peerconn → Time → Decision m peeraddr peerconn)
- data PeerSelectionCounters = PeerSelectionCounters {
- coldPeers ∷ !Int
- warmPeers ∷ !Int
- hotPeers ∷ !Int
- coldBigLedgerPeers ∷ !Int
- warmBigLedgerPeers ∷ !Int
- hotBigLedgerPeers ∷ !Int
- localRoots ∷ ![(Int, Int)]
- peerStateToCounters ∷ Ord peeraddr ⇒ PeerSelectionState peeraddr peerconn → PeerSelectionCounters
- data PeerSharingResult peerAddress
- = PeerSharingResult [peerAddress]
- | PeerSharingNotRegisteredYet
- data TracePeerSelection peeraddr
- = TraceLocalRootPeersChanged (LocalRootPeers peeraddr) (LocalRootPeers peeraddr)
- | TraceTargetsChanged PeerSelectionTargets PeerSelectionTargets
- | TracePublicRootsRequest Int Int
- | TracePublicRootsResults (Map peeraddr PeerAdvertise) Int DiffTime
- | TracePublicRootsFailure SomeException Int DiffTime
- | TraceForgetColdPeers Int Int (Set peeraddr)
- | TraceBigLedgerPeersRequest Int Int
- | TraceBigLedgerPeersResults (Set peeraddr) Int DiffTime
- | TraceBigLedgerPeersFailure SomeException Int DiffTime
- | TraceForgetBigLedgerPeers Int Int (Set peeraddr)
- | TracePeerShareRequests Int Int (Set peeraddr) (Set peeraddr)
- | TracePeerShareResults [(peeraddr, Either SomeException (PeerSharingResult peeraddr))]
- | TracePeerShareResultsFiltered [peeraddr]
- | TraceKnownInboundConnection peeraddr PeerSharing
- | TracePromoteColdPeers Int Int (Set peeraddr)
- | TracePromoteColdLocalPeers [(WarmValency, Int)] (Set peeraddr)
- | TracePromoteColdFailed Int Int peeraddr DiffTime SomeException
- | TracePromoteColdDone Int Int peeraddr
- | TracePromoteColdBigLedgerPeers Int Int (Set peeraddr)
- | TracePromoteColdBigLedgerPeerFailed Int Int peeraddr DiffTime SomeException
- | TracePromoteColdBigLedgerPeerDone Int Int peeraddr
- | TracePromoteWarmPeers Int Int (Set peeraddr)
- | TracePromoteWarmLocalPeers [(HotValency, Int)] (Set peeraddr)
- | TracePromoteWarmFailed Int Int peeraddr SomeException
- | TracePromoteWarmDone Int Int peeraddr
- | TracePromoteWarmAborted Int Int peeraddr
- | TracePromoteWarmBigLedgerPeers Int Int (Set peeraddr)
- | TracePromoteWarmBigLedgerPeerFailed Int Int peeraddr SomeException
- | TracePromoteWarmBigLedgerPeerDone Int Int peeraddr
- | TracePromoteWarmBigLedgerPeerAborted Int Int peeraddr
- | TraceDemoteWarmPeers Int Int (Set peeraddr)
- | TraceDemoteWarmFailed Int Int peeraddr SomeException
- | TraceDemoteWarmDone Int Int peeraddr
- | TraceDemoteWarmBigLedgerPeers Int Int (Set peeraddr)
- | TraceDemoteWarmBigLedgerPeerFailed Int Int peeraddr SomeException
- | TraceDemoteWarmBigLedgerPeerDone Int Int peeraddr
- | TraceDemoteHotPeers Int Int (Set peeraddr)
- | TraceDemoteLocalHotPeers [(HotValency, Int)] (Set peeraddr)
- | TraceDemoteHotFailed Int Int peeraddr SomeException
- | TraceDemoteHotDone Int Int peeraddr
- | TraceDemoteHotBigLedgerPeers Int Int (Set peeraddr)
- | TraceDemoteHotBigLedgerPeerFailed Int Int peeraddr SomeException
- | TraceDemoteHotBigLedgerPeerDone Int Int peeraddr
- | TraceDemoteAsynchronous (Map peeraddr (PeerStatus, Maybe ReconnectDelay))
- | TraceDemoteLocalAsynchronous (Map peeraddr (PeerStatus, Maybe ReconnectDelay))
- | TraceDemoteBigLedgerPeersAsynchronous (Map peeraddr (PeerStatus, Maybe ReconnectDelay))
- | TraceGovernorWakeup
- | TraceChurnWait DiffTime
- | TraceChurnMode ChurnMode
- data DebugPeerSelection peeraddr where
- TraceGovernorState ∷ ∀ peeraddr peerconn. Show peerconn ⇒ Time → Maybe DiffTime → PeerSelectionState peeraddr peerconn → DebugPeerSelection peeraddr
P2P governor policies
data PeerSelectionPolicy peeraddr m Source #
Constructors
PeerSelectionPolicy | |
Fields
|
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 |
type PickPolicy peeraddr m = (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
.
pickPeers ∷ (Ord peeraddr, Functor m) ⇒ PeerSelectionState peeraddr peerconn → PickPolicy peeraddr m → Set peeraddr → Int → m (Set peeraddr) Source #
Check pre-conditions and post-conditions on the pick policies, and supply additional peer attributes from the current state.
P2P governor low level API
data PeerStateActions peeraddr peerconn m Source #
Callbacks which are performed to change peer state.
Constructors
PeerStateActions | |
Fields
|
data PeerSelectionActions peeraddr peerconn m Source #
Actions performed by the peer selection governor.
These being pluggable allows:
- choice of known peer root sets
- running both in simulation and for real
Constructors
PeerSelectionActions | |
Fields
|
Constructors
ChurnModeBulkSync | |
ChurnModeNormal |
P2P governor internals
data PeerSelectionState 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
.
Constructors
PeerSelectionState | |
Fields
|
Instances
(Ord peeraddr, Show peeraddr, Show peerconn) ⇒ Show (PeerSelectionState peeraddr peerconn) Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec ∷ Int → PeerSelectionState peeraddr peerconn → ShowS # show ∷ PeerSelectionState peeraddr peerconn → String # showList ∷ [PeerSelectionState peeraddr peerconn] → ShowS # |
emptyPeerSelectionState ∷ StdGen → [(Int, Int)] → PeerSelectionState peeraddr peerconn Source #
assertPeerSelectionState ∷ Ord peeraddr ⇒ PeerSelectionState peeraddr peerconn → a → a Source #
establishedPeersStatus ∷ Ord peeraddr ⇒ PeerSelectionState peeraddr peerconn → Map peeraddr PeerStatus Source #
A view of the status of each established peer, for testing and debugging.
newtype PublicPeerSelectionState peeraddr Source #
Public PeerSelectionState
that can be accessed by Peer Sharing
mechanisms without any problem.
This data type should not expose too much information and keep only essential data needed for computing the peer sharing request result
Constructors
PublicPeerSelectionState | |
Fields
|
emptyPublicPeerSelectionState ∷ Ord peeraddr ⇒ PublicPeerSelectionState peeraddr Source #
toPublicState ∷ PeerSelectionState peeraddr peerconn → PublicPeerSelectionState peeraddr Source #
Convert a PeerSelectionState
into a public record accessible by the
Peer Sharing mechanisms so we can know about which peers are available and
possibly other needed context.
The governor is using Guarded m (Decision m peeraddr peerconn)
where m
is an STM
monad, to drive its progress.
Constructors
GuardedSkip !(Maybe (Min Time)) |
Let us note that the combined value which is computed by
|
Bundled Patterns
pattern Guarded ∷ Maybe (Min Time) → m a → Guarded m a |
|
Instances
Alternative m ⇒ Semigroup (Guarded m a) Source # |
Guarded x y <> a = Guarded x' y' a <> Guarded x y = Guarded x' y' In the algebraic sense, Ref. absorbing element |
data Decision m peeraddr peerconn Source #
Constructors
Decision | |
Fields
|
type TimedDecision m peeraddr peerconn = Time → Decision m peeraddr peerconn Source #
Decision which has access to the current time, rather than the time when the governor's loop blocked to make a decision.
type MkGuardedDecision peeraddr peerconn m = PeerSelectionPolicy peeraddr m → PeerSelectionState peeraddr peerconn → Guarded (STM m) (TimedDecision m peeraddr peerconn) Source #
Type alias for function types which are used to create governor decisions. Almost all decisions are following this pattern.
newtype Completion m peeraddr peerconn Source #
Constructors
Completion (PeerSelectionState peeraddr peerconn → Time → Decision m peeraddr peerconn) |
data PeerSelectionCounters Source #
Constructors
PeerSelectionCounters | |
Fields
|
Instances
Show PeerSelectionCounters Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec ∷ Int → PeerSelectionCounters → ShowS # show ∷ PeerSelectionCounters → String # showList ∷ [PeerSelectionCounters] → ShowS # | |
Eq PeerSelectionCounters Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods (==) ∷ PeerSelectionCounters → PeerSelectionCounters → Bool # (/=) ∷ PeerSelectionCounters → PeerSelectionCounters → Bool # |
peerStateToCounters ∷ Ord peeraddr ⇒ PeerSelectionState peeraddr peerconn → PeerSelectionCounters Source #
Peer Sharing Auxiliary data type
data PeerSharingResult peerAddress Source #
PeerSharing Result type.
We need a constructor for the case when the Governor wins the race versus the Mux (when initialising the peer sharing miniprotocol). This leads the Governor to lookup a peer that hasn't been registered yet.
Constructors
PeerSharingResult [peerAddress] | |
PeerSharingNotRegisteredYet |
Instances
Show peerAddress ⇒ Show (PeerSharingResult peerAddress) | |
Defined in Ouroboros.Network.Protocol.PeerSharing.Type Methods showsPrec ∷ Int → PeerSharingResult peerAddress → ShowS # show ∷ PeerSharingResult peerAddress → String # showList ∷ [PeerSharingResult peerAddress] → ShowS # | |
Eq peerAddress ⇒ Eq (PeerSharingResult peerAddress) | |
Defined in Ouroboros.Network.Protocol.PeerSharing.Type Methods (==) ∷ PeerSharingResult peerAddress → PeerSharingResult peerAddress → Bool # (/=) ∷ PeerSharingResult peerAddress → PeerSharingResult peerAddress → Bool # |
Traces
data TracePeerSelection peeraddr Source #
Constructors
TraceLocalRootPeersChanged (LocalRootPeers peeraddr) (LocalRootPeers peeraddr) | |
TraceTargetsChanged PeerSelectionTargets PeerSelectionTargets | Peer selection targets changed: old targets, new targets. |
TracePublicRootsRequest Int Int | |
TracePublicRootsResults (Map peeraddr PeerAdvertise) Int DiffTime | |
TracePublicRootsFailure SomeException Int DiffTime | |
TraceForgetColdPeers Int Int (Set peeraddr) | target known peers, actual known peers, selected peers |
TraceBigLedgerPeersRequest Int Int | |
TraceBigLedgerPeersResults (Set peeraddr) Int DiffTime | |
TraceBigLedgerPeersFailure SomeException Int DiffTime | |
TraceForgetBigLedgerPeers Int Int (Set peeraddr) | target known big ledger peers, actual known big ledger peers, selected peers |
TracePeerShareRequests Int Int (Set peeraddr) (Set peeraddr) | target known peers, actual known peers, peers available for peer sharing, peers selected for peer sharing |
TracePeerShareResults [(peeraddr, Either SomeException (PeerSharingResult peeraddr))] | |
TracePeerShareResultsFiltered [peeraddr] | |
TraceKnownInboundConnection peeraddr PeerSharing | |
TracePromoteColdPeers Int Int (Set peeraddr) | target established, actual established, selected peers |
TracePromoteColdLocalPeers [(WarmValency, Int)] (Set peeraddr) | target local established, actual local established, selected peers |
TracePromoteColdFailed Int Int peeraddr DiffTime SomeException | |
TracePromoteColdDone Int Int peeraddr | target established, actual established, peer |
TracePromoteColdBigLedgerPeers Int Int (Set peeraddr) | target established big ledger peers, actual established big ledger peers, selected peers |
TracePromoteColdBigLedgerPeerFailed Int Int peeraddr DiffTime SomeException | target established big ledger peers, actual established big ledger peers, peer, delay until next promotion, reason |
TracePromoteColdBigLedgerPeerDone Int Int peeraddr | target established big ledger peers, actual established big ledger peers, peer |
TracePromoteWarmPeers Int Int (Set peeraddr) | target active, actual active, selected peers |
TracePromoteWarmLocalPeers | Promote local peers to warm |
Fields
| |
TracePromoteWarmFailed Int Int peeraddr SomeException | |
TracePromoteWarmDone Int Int peeraddr | target active, actual active, peer |
TracePromoteWarmAborted Int Int peeraddr | aborted promotion of a warm peer; likely it was asynchronously demoted in the meantime. target active, actual active, peer |
TracePromoteWarmBigLedgerPeers Int Int (Set peeraddr) | target active big ledger peers, actual active big ledger peers, selected peers |
TracePromoteWarmBigLedgerPeerFailed Int Int peeraddr SomeException | target active big ledger peers, actual active big ledger peers, peer, reason |
TracePromoteWarmBigLedgerPeerDone Int Int peeraddr | target active big ledger peers, actual active big ledger peers, peer |
TracePromoteWarmBigLedgerPeerAborted Int Int peeraddr | aborted promotion of a warm big ledger peer; likely it was asynchronously demoted in the meantime. target active, actual active, peer |
TraceDemoteWarmPeers Int Int (Set peeraddr) | target established, actual established, selected peers |
TraceDemoteWarmFailed Int Int peeraddr SomeException | target established, actual established, peer, reason |
TraceDemoteWarmDone Int Int peeraddr | target established, actual established, peer |
TraceDemoteWarmBigLedgerPeers Int Int (Set peeraddr) | target established big ledger peers, actual established big ledger peers, selected peers |
TraceDemoteWarmBigLedgerPeerFailed Int Int peeraddr SomeException | target established big ledger peers, actual established big ledger peers, peer, reason |
TraceDemoteWarmBigLedgerPeerDone Int Int peeraddr | target established big ledger peers, actual established big ledger peers, peer |
TraceDemoteHotPeers Int Int (Set peeraddr) | target active, actual active, selected peers |
TraceDemoteLocalHotPeers [(HotValency, Int)] (Set peeraddr) | local per-group (target active, actual active), selected peers |
TraceDemoteHotFailed Int Int peeraddr SomeException | target active, actual active, peer, reason |
TraceDemoteHotDone Int Int peeraddr | target active, actual active, peer |
TraceDemoteHotBigLedgerPeers Int Int (Set peeraddr) | target active big ledger peers, actual active big ledger peers, selected peers |
TraceDemoteHotBigLedgerPeerFailed Int Int peeraddr SomeException | target active big ledger peers, actual active big ledger peers, peer, reason |
TraceDemoteHotBigLedgerPeerDone Int Int peeraddr | target active big ledger peers, actual active big ledger peers, peer |
TraceDemoteAsynchronous (Map peeraddr (PeerStatus, Maybe ReconnectDelay)) | |
TraceDemoteLocalAsynchronous (Map peeraddr (PeerStatus, Maybe ReconnectDelay)) | |
TraceDemoteBigLedgerPeersAsynchronous (Map peeraddr (PeerStatus, Maybe ReconnectDelay)) | |
TraceGovernorWakeup | |
TraceChurnWait DiffTime | |
TraceChurnMode ChurnMode |
Instances
(Ord peeraddr, Show peeraddr) ⇒ Show (TracePeerSelection peeraddr) Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec ∷ Int → TracePeerSelection peeraddr → ShowS # show ∷ TracePeerSelection peeraddr → String # showList ∷ [TracePeerSelection peeraddr] → ShowS # |
data DebugPeerSelection peeraddr where Source #
Constructors
TraceGovernorState ∷ ∀ peeraddr peerconn. Show peerconn ⇒ Time → Maybe DiffTime → PeerSelectionState peeraddr peerconn → DebugPeerSelection peeraddr |
Instances
(Ord peeraddr, Show peeraddr) ⇒ Show (DebugPeerSelection peeraddr) Source # | |
Defined in Ouroboros.Network.PeerSelection.Governor.Types Methods showsPrec ∷ Int → DebugPeerSelection peeraddr → ShowS # show ∷ DebugPeerSelection peeraddr → String # showList ∷ [DebugPeerSelection peeraddr] → ShowS # |