Skip to content

Commit ba38c86

Browse files
tbagrel1agustinmistaamesgengeo2anbacquey
committed
Register PerasVoteDiffusion mini-protocol in NodeToNode
Co-authored-by: Agustin Mista <[email protected]> Co-authored-by: Alexander Esgen <[email protected]> Co-authored-by: Georgy Lukyanov <[email protected]> Co-authored-by: Nicolas BACQUEY <[email protected]> Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
1 parent 60f24db commit ba38c86

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

cardano-diffusion/lib/Cardano/Network/NodeToNode.hs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module Cardano.Network.NodeToNode
2222
, keepAliveProtocolLimits
2323
, peerSharingProtocolLimits
2424
, perasCertDiffusionProtocolLimits
25+
, perasVoteDiffusionProtocolLimits
2526
, defaultMiniProtocolParameters
2627
, NodeToNodeVersion (..)
2728
, NodeToNodeVersionData (..)
@@ -71,6 +72,7 @@ module Cardano.Network.NodeToNode
7172
, keepAliveMiniProtocolNum
7273
, peerSharingMiniProtocolNum
7374
, perasCertDiffusionMiniProtocolNum
75+
, perasVoteDiffusionMiniProtocolNum
7476
) where
7577

7678
import Control.Exception (SomeException)
@@ -128,6 +130,10 @@ data NodeToNodeProtocols appType initiatorCtx responderCtx bytes m a b = NodeToN
128130
--
129131
perasCertDiffusionProtocol :: RunMiniProtocol appType initiatorCtx responderCtx bytes m a b,
130132

133+
-- | Peras vote diffusion mini-protocol
134+
--
135+
perasVoteDiffusionProtocol :: RunMiniProtocol appType initiatorCtx responderCtx bytes m a b,
136+
131137
-- | keep-alive mini-protocol
132138
--
133139
keepAliveProtocol :: RunMiniProtocol appType initiatorCtx responderCtx bytes m a b,
@@ -164,7 +170,7 @@ data MiniProtocolParameters = MiniProtocolParameters {
164170
txDecisionPolicy :: !TxDecisionPolicy,
165171
-- ^ tx submission protocol decision logic parameters
166172

167-
perasCertDiffusionMaxFifoLength :: !NumObjectsOutstanding
173+
perasCertDiffusionMaxFifoLength :: !NumObjectsOutstanding,
168174
-- ^ Maximum number of PerasCerts in the outbound peer's outstanding FIFO.
169175
--
170176
-- This indirectly limits the number of pipelined requests from the inbound peer:
@@ -184,6 +190,11 @@ data MiniProtocolParameters = MiniProtocolParameters {
184190
-- So, the theoretical maximum pipeline size is
185191
-- @2 * perasCertDiffusionMaxFifoLength@, but in practice the pipeline size will
186192
-- be much smaller, as the inbound peer typically batches requests.
193+
194+
perasVoteDiffusionMaxFifoLength :: !NumObjectsOutstanding
195+
-- ^ Maximum number of PerasVotes in the outbound peer's outstanding FIFO.
196+
-- See comment on 'perasCertDiffusionMaxFifoLength' for more details to
197+
-- understand why this indirectly limits the number of pipelined requests.
187198
}
188199

189200
defaultMiniProtocolParameters :: MiniProtocolParameters
@@ -195,6 +206,9 @@ defaultMiniProtocolParameters = MiniProtocolParameters {
195206
-- | TODO: this value is still being discussed.
196207
-- See https://github.com/tweag/cardano-peras/issues/97 for reference.
197208
, perasCertDiffusionMaxFifoLength = 10
209+
-- | TODO: this value is still being discussed.
210+
-- See https://github.com/tweag/cardano-peras/issues/97 for reference.
211+
, perasVoteDiffusionMaxFifoLength = 10_000
198212
}
199213

200214
-- | Make an 'OuroborosApplication' for the bundle of mini-protocols that
@@ -234,7 +248,8 @@ nodeToNodeProtocols featureFlags miniProtocolParameters protocols
234248
NodeToNodeProtocols { chainSyncProtocol,
235249
blockFetchProtocol,
236250
txSubmissionProtocol,
237-
perasCertDiffusionProtocol
251+
perasCertDiffusionProtocol,
252+
perasVoteDiffusionProtocol
238253
} ->
239254
[ MiniProtocol {
240255
miniProtocolNum = chainSyncMiniProtocolNum,
@@ -264,6 +279,12 @@ nodeToNodeProtocols featureFlags miniProtocolParameters protocols
264279
miniProtocolLimits = perasCertDiffusionProtocolLimits miniProtocolParameters,
265280
miniProtocolRun = perasCertDiffusionProtocol
266281
}
282+
, MiniProtocol {
283+
miniProtocolNum = perasVoteDiffusionMiniProtocolNum,
284+
miniProtocolStart = StartOnDemand,
285+
miniProtocolLimits = perasVoteDiffusionProtocolLimits miniProtocolParameters,
286+
miniProtocolRun = perasVoteDiffusionProtocol
287+
}
267288
])
268289

269290
-- Warm protocols: reserved for 'tip-sample'.
@@ -301,7 +322,8 @@ chainSyncProtocolLimits
301322
, txSubmissionProtocolLimits
302323
, keepAliveProtocolLimits
303324
, peerSharingProtocolLimits
304-
, perasCertDiffusionProtocolLimits :: MiniProtocolParameters -> MiniProtocolLimits
325+
, perasCertDiffusionProtocolLimits
326+
, perasVoteDiffusionProtocolLimits :: MiniProtocolParameters -> MiniProtocolLimits
305327

306328
chainSyncProtocolLimits MiniProtocolParameters { chainSyncPipeliningHighMark } =
307329
MiniProtocolLimits {
@@ -431,6 +453,15 @@ perasCertDiffusionProtocolLimits MiniProtocolParameters { perasCertDiffusionMaxF
431453
fromIntegral perasCertDiffusionMaxFifoLength * 20_000
432454
}
433455

456+
perasVoteDiffusionProtocolLimits MiniProtocolParameters { perasVoteDiffusionMaxFifoLength } =
457+
MiniProtocolLimits {
458+
-- Peras votes are expected to be much smaller than Peras certificates.
459+
-- We assume an upper bound of 1 kB per vote.
460+
-- See https://github.com/tweag/cardano-peras/issues/97
461+
maximumIngressQueue = addSafetyMargin $
462+
fromIntegral perasVoteDiffusionMaxFifoLength * 1_000
463+
}
464+
434465
chainSyncMiniProtocolNum :: MiniProtocolNum
435466
chainSyncMiniProtocolNum = MiniProtocolNum 2
436467

@@ -449,6 +480,9 @@ peerSharingMiniProtocolNum = MiniProtocolNum 10
449480
perasCertDiffusionMiniProtocolNum :: MiniProtocolNum
450481
perasCertDiffusionMiniProtocolNum = MiniProtocolNum 16
451482

483+
perasVoteDiffusionMiniProtocolNum :: MiniProtocolNum
484+
perasVoteDiffusionMiniProtocolNum = MiniProtocolNum 17
485+
452486
-- | A specialised version of @'Ouroboros.Network.Socket.connectToNode'@.
453487
--
454488
connectTo

0 commit comments

Comments
 (0)