Safe Haskell | None |
---|---|

Language | Haskell2010 |

## Synopsis

- deactivateTimeout :: DiffTime
- closeConnectionTimeout :: DiffTime
- minChainSyncTimeout :: DiffTime
- maxChainSyncTimeout :: DiffTime
- churnEstablishConnectionTimeout :: DiffTime
- peerMetricsConfiguration :: PeerMetricsConfiguration
- inboundPeersRetryDelay :: DiffTime
- maxInboundPeers :: Int
- optionalMerge :: Ord k => Map k a -> Map k b -> Map k (a, Maybe b)
- simplePeerSelectionPolicy :: forall (m :: Type -> Type) peerAddr. (MonadSTM m, Ord peerAddr) => StrictTVar m StdGen -> STM m ChurnMode -> PeerMetrics m peerAddr -> RepromoteDelay -> PeerSelectionPolicy peerAddr m
- prunePolicy :: Ord peerAddr => PrunePolicy peerAddr

# Documentation

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`

).

minChainSyncTimeout :: DiffTime Source #

Chain sync `mustReplayTimeout`

lower bound.

maxChainSyncTimeout :: DiffTime Source #

Chain sync `mustReplayTimeout`

upper bound.

churnEstablishConnectionTimeout :: DiffTime Source #

Churn timeouts after 60s trying to establish a connection.

This doesn't mean the connection is terminated after it, just churns moves on.

peerMetricsConfiguration :: PeerMetricsConfiguration Source #

Number of events tracked by `PeerMetrics`

. This corresponds to one hour of
blocks on mainnet.

TODO: issue #3866

inboundPeersRetryDelay :: DiffTime Source #

Minimal delay between adding inbound peers to known set of outbound governor.

It is set to 60s, the same as the peer sharing request timeout.

maxInboundPeers :: Int Source #

Maximal number of light peers included at once.

optionalMerge :: Ord k => Map k a -> Map k b -> Map k (a, Maybe b) Source #

Merge two dictionaries where values of the first one are obligatory, while the second one are optional.

simplePeerSelectionPolicy Source #

:: forall (m :: Type -> Type) peerAddr. (MonadSTM m, Ord peerAddr) | |

=> StrictTVar m StdGen | |

-> STM m ChurnMode | |

-> PeerMetrics m peerAddr | |

-> RepromoteDelay | delay on error |

-> PeerSelectionPolicy peerAddr m |

prunePolicy :: Ord peerAddr => PrunePolicy peerAddr Source #

Sort by upstreamness and a random score.

Note: this `PrunePolicy`

does not depend on `igsConnections`

. We put
`igsPrng`

in `InboundGovernorState`

only to show that we can have
a `PrunePolicy`

which depends on the `InboundGovernorState`

as a more
refined policy would do.

*complexity:* \(\mathcal{O}(n\log\;n)\)

TODO: complexity could be improved.