{-# LANGUAGE NumericUnderscores #-}
module Ouroboros.Network.TxSubmission.Inbound.V2.Policy
( TxDecisionPolicy (..)
, defaultTxDecisionPolicy
, saneTxDecisionPolicy
, max_TX_SIZE
, NumTxIdsToReq (..)
) where
import Control.DeepSeq
import Control.Monad.Class.MonadTime.SI
import Ouroboros.Network.Protocol.TxSubmission2.Type (NumTxIdsToReq (..))
import Ouroboros.Network.SizeInBytes (SizeInBytes (..))
max_TX_SIZE :: SizeInBytes
max_TX_SIZE :: SizeInBytes
max_TX_SIZE = SizeInBytes
65_540
data TxDecisionPolicy = TxDecisionPolicy {
TxDecisionPolicy -> NumTxIdsToReq
maxNumTxIdsToRequest :: !NumTxIdsToReq,
TxDecisionPolicy -> NumTxIdsToReq
maxUnacknowledgedTxIds :: !NumTxIdsToReq,
TxDecisionPolicy -> SizeInBytes
txsSizeInflightPerPeer :: !SizeInBytes,
TxDecisionPolicy -> Int
maxOutstandingTxBatchesPerPeer :: !Int,
TxDecisionPolicy -> Int
txInflightMultiplicity :: !Int,
TxDecisionPolicy -> DiffTime
bufferedTxsMinLifetime :: !DiffTime,
TxDecisionPolicy -> Double
scoreRate :: !Double,
TxDecisionPolicy -> Double
scoreMax :: !Double,
TxDecisionPolicy -> Double
scoreAcceptDecrement :: !Double,
TxDecisionPolicy -> DiffTime
interTxSpace :: !DiffTime,
TxDecisionPolicy -> DiffTime
inflightTimeout :: !DiffTime,
TxDecisionPolicy -> DiffTime
maxPeerClaimDelay :: !DiffTime,
TxDecisionPolicy -> Bool
disablePipelinedTxIdRequests :: !Bool
}
deriving (TxDecisionPolicy -> TxDecisionPolicy -> Bool
(TxDecisionPolicy -> TxDecisionPolicy -> Bool)
-> (TxDecisionPolicy -> TxDecisionPolicy -> Bool)
-> Eq TxDecisionPolicy
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TxDecisionPolicy -> TxDecisionPolicy -> Bool
== :: TxDecisionPolicy -> TxDecisionPolicy -> Bool
$c/= :: TxDecisionPolicy -> TxDecisionPolicy -> Bool
/= :: TxDecisionPolicy -> TxDecisionPolicy -> Bool
Eq, Int -> TxDecisionPolicy -> ShowS
[TxDecisionPolicy] -> ShowS
TxDecisionPolicy -> String
(Int -> TxDecisionPolicy -> ShowS)
-> (TxDecisionPolicy -> String)
-> ([TxDecisionPolicy] -> ShowS)
-> Show TxDecisionPolicy
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TxDecisionPolicy -> ShowS
showsPrec :: Int -> TxDecisionPolicy -> ShowS
$cshow :: TxDecisionPolicy -> String
show :: TxDecisionPolicy -> String
$cshowList :: [TxDecisionPolicy] -> ShowS
showList :: [TxDecisionPolicy] -> ShowS
Show)
instance NFData TxDecisionPolicy where
rnf :: TxDecisionPolicy -> ()
rnf TxDecisionPolicy{} = ()
defaultTxDecisionPolicy :: TxDecisionPolicy
defaultTxDecisionPolicy :: TxDecisionPolicy
defaultTxDecisionPolicy =
TxDecisionPolicy {
maxNumTxIdsToRequest :: NumTxIdsToReq
maxNumTxIdsToRequest = NumTxIdsToReq
6,
maxUnacknowledgedTxIds :: NumTxIdsToReq
maxUnacknowledgedTxIds = NumTxIdsToReq
10,
txsSizeInflightPerPeer :: SizeInBytes
txsSizeInflightPerPeer = SizeInBytes
max_TX_SIZE SizeInBytes -> SizeInBytes -> SizeInBytes
forall a. Num a => a -> a -> a
* SizeInBytes
6,
maxOutstandingTxBatchesPerPeer :: Int
maxOutstandingTxBatchesPerPeer = Int
4,
txInflightMultiplicity :: Int
txInflightMultiplicity = Int
2,
bufferedTxsMinLifetime :: DiffTime
bufferedTxsMinLifetime = DiffTime
2,
scoreRate :: Double
scoreRate = Double
0.001,
scoreMax :: Double
scoreMax = Double
15 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
60,
scoreAcceptDecrement :: Double
scoreAcceptDecrement = Double
3,
interTxSpace :: DiffTime
interTxSpace = DiffTime
0.250,
inflightTimeout :: DiffTime
inflightTimeout = DiffTime
0.600,
maxPeerClaimDelay :: DiffTime
maxPeerClaimDelay = DiffTime
0.250,
disablePipelinedTxIdRequests :: Bool
disablePipelinedTxIdRequests = Bool
False
}
saneTxDecisionPolicy :: TxDecisionPolicy -> Bool
saneTxDecisionPolicy :: TxDecisionPolicy -> Bool
saneTxDecisionPolicy TxDecisionPolicy
p =
TxDecisionPolicy -> NumTxIdsToReq
maxNumTxIdsToRequest TxDecisionPolicy
p NumTxIdsToReq -> NumTxIdsToReq -> Bool
forall a. Ord a => a -> a -> Bool
>= NumTxIdsToReq
1
Bool -> Bool -> Bool
&& TxDecisionPolicy -> NumTxIdsToReq
maxUnacknowledgedTxIds TxDecisionPolicy
p NumTxIdsToReq -> NumTxIdsToReq -> Bool
forall a. Ord a => a -> a -> Bool
>= NumTxIdsToReq
1
Bool -> Bool -> Bool
&& TxDecisionPolicy -> SizeInBytes
txsSizeInflightPerPeer TxDecisionPolicy
p SizeInBytes -> SizeInBytes -> Bool
forall a. Ord a => a -> a -> Bool
> SizeInBytes
0
Bool -> Bool -> Bool
&& TxDecisionPolicy -> Int
maxOutstandingTxBatchesPerPeer TxDecisionPolicy
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
1
Bool -> Bool -> Bool
&& TxDecisionPolicy -> Int
txInflightMultiplicity TxDecisionPolicy
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
1
Bool -> Bool -> Bool
&& TxDecisionPolicy -> DiffTime
bufferedTxsMinLifetime TxDecisionPolicy
p DiffTime -> DiffTime -> Bool
forall a. Ord a => a -> a -> Bool
>= DiffTime
0
Bool -> Bool -> Bool
&& TxDecisionPolicy -> Double
scoreRate TxDecisionPolicy
p Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0
Bool -> Bool -> Bool
&& TxDecisionPolicy -> Double
scoreMax TxDecisionPolicy
p Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0
Bool -> Bool -> Bool
&& TxDecisionPolicy -> Double
scoreAcceptDecrement TxDecisionPolicy
p Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0
Bool -> Bool -> Bool
&& TxDecisionPolicy -> DiffTime
interTxSpace TxDecisionPolicy
p DiffTime -> DiffTime -> Bool
forall a. Ord a => a -> a -> Bool
>= DiffTime
0
Bool -> Bool -> Bool
&& TxDecisionPolicy -> DiffTime
inflightTimeout TxDecisionPolicy
p DiffTime -> DiffTime -> Bool
forall a. Ord a => a -> a -> Bool
>= TxDecisionPolicy -> DiffTime
interTxSpace TxDecisionPolicy
p
Bool -> Bool -> Bool
&& TxDecisionPolicy -> DiffTime
maxPeerClaimDelay TxDecisionPolicy
p DiffTime -> DiffTime -> Bool
forall a. Ord a => a -> a -> Bool
>= DiffTime
0