ouroboros-network
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.Diffusion.Configuration

Description

One stop shop for configuring diffusion layer for upstream clients nb. the module Ouroboros.Network.Diffusion.Governor should be imported qualified as PeerSelection by convention to aid comprehension

Synopsis

Documentation

newtype MinBigLedgerPeersForTrustedState #

Minimum number of hot big ledger peers in Genesis mode for trusted state to be signalled to Consensus. This number should be smaller than the targetNumberOfActiveBigLedgerPeers but greater than 1. In Genesis, we may demote a big ledger peer for underperformance, but not promote a replacement immediately to guard against adversaries which may want to slow down our progress.

defaultDiffusionMode :: P2P Source #

Principal mode of network operation

defaultPeerSharing :: PeerSharing Source #

Node's peer sharing participation flag

defaultBlockFetchConfiguration :: Int -> BlockFetchConfiguration Source #

Configuration for FetchDecisionPolicy.

defaultDeadlineTargets :: PeerSelectionTargets Source #

Outbound governor targets Targets may vary depending on whether a node is operating in Genesis mode.

Default peer targets in Praos mode

defaultSyncTargets :: PeerSelectionTargets Source #

These targets are established when Genesis mode is enabled in node configuration and when the node is syncing up

data AcceptedConnectionsLimit #

Policy which governs how to limit the number of accepted connections.

Constructors

AcceptedConnectionsLimit 

Fields

data BlockFetchConfiguration Source #

Configuration for FetchDecisionPolicy. Should be determined by external local node config.

Constructors

BlockFetchConfiguration 

Fields

data ChainSyncTimeout #

Configurable timeouts

These are configurable for at least the following reasons.

o So that deployment and testing can use different values.

o So that a net running Praos can better cope with streaks of empty slots. (See intersectmbo/ouroboros-network#2245.)

data DiffusionMode #

The flag which indicates whether the node runs only initiator or both initiator or responder node.

This data structure has two proposes:

  • instruct the diffusion layer if it should listen on incoming connections;
  • it is communicated via NodeToNodeVersionData during handshake negotiation. In non-p2p mode we always send InitiatorOnlyDiffusionMode, in p2p mode we send exactly what the diffusion is given. In non-p2p mode every connection outbound port is ephemeral, the remote side cannot connect to it, however in p2p mode the outbound port is actually the port on which the node is listening (if it runs in InitiatorAndResponderDiffusionMode).

data MiniProtocolParameters Source #

Constructors

MiniProtocolParameters 

Fields

data P2P Source #

Promoted data types.

Constructors

P2P 
NonP2P 

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

data PeerSharing #

Is a peer willing to participate in Peer Sharing? If yes are others allowed to share this peer's address? Information about the node comes from the configuration file, while information about other nodes is received via handshake.

NOTE: This information is only useful if P2P flag is enabled.

Constructors

PeerSharingDisabled

Peer does not participate in Peer Sharing at all

PeerSharingEnabled

Peer participates in Peer Sharing

Instances

Instances details
Monoid PeerSharing

The Monoid laws are witnessed by the following denotation function:

⟦_⟧ :: PeerSharing -> All ⟦ PeerSharingDisabled ⟧ = All False ⟦ PeerSharingEnabled ⟧ = All True

Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

Semigroup PeerSharing

The combination of two PeerSharing values forms a Monoid where the unit is PeerSharingEnabled.

This operation is used in the connection handshake.

Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

Generic PeerSharing 
Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

Associated Types

type Rep PeerSharing 
Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

type Rep PeerSharing = D1 ('MetaData "PeerSharing" "Ouroboros.Network.PeerSelection.PeerSharing" "ouroboros-network-api-0.9.0.1-inplace" 'False) (C1 ('MetaCons "PeerSharingDisabled" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PeerSharingEnabled" 'PrefixI 'False) (U1 :: Type -> Type))
Read PeerSharing 
Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

Show PeerSharing 
Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

Eq PeerSharing 
Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

type Rep PeerSharing 
Instance details

Defined in Ouroboros.Network.PeerSelection.PeerSharing

type Rep PeerSharing = D1 ('MetaData "PeerSharing" "Ouroboros.Network.PeerSelection.PeerSharing" "ouroboros-network-api-0.9.0.1-inplace" 'False) (C1 ('MetaCons "PeerSharingDisabled" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PeerSharingEnabled" 'PrefixI 'False) (U1 :: Type -> Type))

data ConsensusMode #

Diffusion layer configuration parameter.

The two modes determine which PeerSelectionTargets basis is used by churn and OG. The node's configuration sets this, and diffusion is initiated and remains only in this mode.

Constructors

GenesisMode

When LedgerStateJudgement is TooOld, the targets basis is changed from default to one specific for this mode, which uses more big ledger peers until syncing is complete.

PraosMode

The legacy mode which depends on official relays and/or bootstrap peers configuration. This mode uses only the default target basis irrespective ledger state.

Instances

Instances details
FromJSON ConsensusMode 
Instance details

Defined in Ouroboros.Network.ConsensusMode

Generic ConsensusMode 
Instance details

Defined in Ouroboros.Network.ConsensusMode

Associated Types

type Rep ConsensusMode 
Instance details

Defined in Ouroboros.Network.ConsensusMode

type Rep ConsensusMode = D1 ('MetaData "ConsensusMode" "Ouroboros.Network.ConsensusMode" "ouroboros-network-api-0.9.0.1-inplace" 'False) (C1 ('MetaCons "GenesisMode" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PraosMode" 'PrefixI 'False) (U1 :: Type -> Type))
Show ConsensusMode 
Instance details

Defined in Ouroboros.Network.ConsensusMode

Eq ConsensusMode 
Instance details

Defined in Ouroboros.Network.ConsensusMode

type Rep ConsensusMode 
Instance details

Defined in Ouroboros.Network.ConsensusMode

type Rep ConsensusMode = D1 ('MetaData "ConsensusMode" "Ouroboros.Network.ConsensusMode" "ouroboros-network-api-0.9.0.1-inplace" 'False) (C1 ('MetaCons "GenesisMode" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PraosMode" 'PrefixI 'False) (U1 :: Type -> Type))

defaultMinBigLedgerPeersForTrustedState :: MinBigLedgerPeersForTrustedState Source #

This parameter controls the minimum number of active connections with big ledger peers that must be maintained when syncing in Genesis mode such that trusted state can be signalled to Consensus. Exiting syncing / entering deadline mode is predicated on this condition. This should be below targetNumberOfActiveBigLedgerPeers in syncTargets otherwise untrusted state will never be departed. This value is lower than the target, because in Genesis we may demote a big ledger peer for underperformance and not immediately promote one from the warm set in case there are adversaries whom are intentionally trying to slow us down.

deactivateTimeout :: DiffTime Source #

Timeout for spsDeactivateTimeout and churn hot to warm demotions.

The maximal timeout on ChainSync (in StMustReply state) is 269s, see maxChainSyncTimeout below.

closeConnectionTimeout :: DiffTime Source #

Timeout for spsCloseConnectionTimeout.

This timeout depends on KeepAlive and TipSample timeouts. KeepAlive keeps agency most of the time, but TipSample can give away its agency for longer periods of time. Here we allow it to get 6 blocks (assuming a new block every 20s).

peerMetricsConfiguration :: PeerMetricsConfiguration Source #

Number of events tracked by PeerMetrics. This corresponds to one hour of blocks on mainnet.

TODO: issue #3866

defaultProtocolIdleTimeout :: DiffTime #

Inactivity timeout. It configures how long to wait since the local side demoted remote peer to cold, before closing the connection.

handshake_QUERY_SHUTDOWN_DELAY :: DiffTime #

A 20s delay after query result was send back, before we close the connection. After that delay we close the connection.

ps_POLICY_PEER_SHARE_STICKY_TIME :: DiffTime Source #

Amount of time between changes to the salt used to pick peers to gossip about.

ps_POLICY_PEER_SHARE_MAX_PEERS :: PeerSharingAmount Source #

Maximum number of peers to respond with in a single request