You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
caseChainProducerState.followerInstruction rid cps of
Nothing-> retry
Just (u, cps') ->do
writeTVar chainvar cps'
let chain =ChainProducerState.chainState cps'
return (castTip (Chain.headTip chain), u)
does not adhere to the spec, namely the following aspec:
Whenever the server replies with $\texttt{MsgIntersectFound}$ the client can expect the next
update (i.e. a reply to $\texttt{MsgRequestNext}$) to be $\texttt{MsgRollBackward}$ to the specified $point_{intersect}$
Concretely, when the StrictTVar m (ChainProducerState blk) changes at the same time as an intersection was found, then thread scheduling can result in sending a MsgRollBackward to a different point than the negotiated intersection.
The solution here would be to track a bit of state to make sure that the created follower will always first send a MsgRollBackward to the negotiated intersection even if the ChainProducerState changed in the meantime.
The ChainSync server example
ouroboros-network/ouroboros-network-protocols/testlib/Ouroboros/Network/Protocol/ChainSync/Examples.hs
Lines 161 to 261 in 29899df
does not adhere to the spec, namely the following aspec:
Concretely, when the
StrictTVar m (ChainProducerState blk)
changes at the same time as an intersection was found, then thread scheduling can result in sending aMsgRollBackward
to a different point than the negotiated intersection.The solution here would be to track a bit of state to make sure that the created follower will always first send a
MsgRollBackward
to the negotiated intersection even if theChainProducerState
changed in the meantime.FTR: This was noticed in IntersectMBO/ouroboros-consensus#1186 (comment), but isn't blocking us.
The text was updated successfully, but these errors were encountered: