Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

coot/versions-0.19 #5061

Merged
merged 4 commits into from
Feb 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cardano-client/cardano-client.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ library
network-mux ^>=0.6,
ouroboros-network ^>=0.19,
ouroboros-network-api ^>=0.12,
ouroboros-network-framework ^>=0.15,
ouroboros-network-framework ^>=0.15 || ^>=0.16,
si-timers,

ghc-options:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ instance Semigroup PeerSharing where
(<>) :: PeerSharing -> PeerSharing -> PeerSharing
PeerSharingDisabled <> _ = PeerSharingDisabled
_ <> PeerSharingDisabled = PeerSharingDisabled
_ <> _ = PeerSharingEnabled
PeerSharingEnabled <> PeerSharingEnabled = PeerSharingEnabled

-- | The Monoid laws are witnessed by the following denotation function:
--
Expand Down
6 changes: 6 additions & 0 deletions ouroboros-network-framework/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@

### Non-breaking changes

## 0.16.0.0 -- 2025-02-03

### Breaking changes

* `simpleSingletonVersions`: takes a callback which receives negotiated version data.

## 0.15.0.0 -- 2025-01-02

### Breaking changes
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: ouroboros-network-framework
version: 0.15.0.0
version: 0.16.0.0
synopsis: Ouroboros network framework
description: Ouroboros network framework.
license: Apache-2.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ unversionedProtocol :: app
-> Versions UnversionedProtocol
UnversionedProtocolData
app
unversionedProtocol = simpleSingletonVersions UnversionedProtocol UnversionedProtocolData
unversionedProtocol app =
simpleSingletonVersions UnversionedProtocol
UnversionedProtocolData
(\_ -> app)


-- | Alternative for 'UnversionedProtocolData' which contains 'DataFlow'.
Expand Down Expand Up @@ -119,8 +122,10 @@ dataFlowProtocol :: DataFlow
-> Versions UnversionedProtocol
DataFlowProtocolData
app
dataFlowProtocol dataFlow =
simpleSingletonVersions UnversionedProtocol (DataFlowProtocolData dataFlow PeerSharingDisabled)
dataFlowProtocol dataFlow app =
simpleSingletonVersions UnversionedProtocol
(DataFlowProtocolData dataFlow PeerSharingDisabled)
(\_ -> app)

-- | 'Handshake' codec used in various tests.
--
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,13 @@ data VersionMismatch vNum where
--
simpleSingletonVersions
:: vNum
-- ^ version number
-> vData
-> r
-- ^ proposed version data
-> (vData -> r)
-- ^ callback which receives negotiated version data
-> Versions vNum vData r
simpleSingletonVersions vNum vData r =
Versions
$ Map.singleton vNum
(Version (\_ -> r) vData)
(Version r vData)
2 changes: 2 additions & 0 deletions ouroboros-network/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

### Non-breaking changes

## 0.19.0.2 -- 2025-02-03

## 0.19.0.1 -- 2025-01-15

### Breaking changes
Expand Down
8 changes: 4 additions & 4 deletions ouroboros-network/demo/chain-sync.hs
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ clientChainSync sockPaths maxSlotNo = withIOManager $ \iocp ->
(simpleSingletonVersions
UnversionedProtocol
UnversionedProtocolData
app)
(\_ -> app))
Nothing
(localAddressFromPath sockPath)

Expand Down Expand Up @@ -287,7 +287,7 @@ serverChainSync sockAddr slotLength seed = withIOManager $ \iocp -> do
(simpleSingletonVersions
UnversionedProtocol
UnversionedProtocolData
(SomeResponderApplication (app prng)))
(\_ -> SomeResponderApplication (app prng)))
nullErrorPolicies
$ \_ serverAsync ->
wait serverAsync -- block until async exception
Expand Down Expand Up @@ -494,7 +494,7 @@ clientBlockFetch sockAddrs maxSlotNo = withIOManager $ \iocp -> do
(simpleSingletonVersions
UnversionedProtocol
UnversionedProtocolData
app)
(\_ -> app))
Nothing
(localAddressFromPath sockAddr)
| sockAddr <- sockAddrs ]
Expand Down Expand Up @@ -561,7 +561,7 @@ serverBlockFetch sockAddr slotLength seed = withIOManager $ \iocp -> do
(simpleSingletonVersions
UnversionedProtocol
UnversionedProtocolData
(SomeResponderApplication (app prng)))
(\_ -> SomeResponderApplication (app prng)))
nullErrorPolicies
$ \_ serverAsync ->
wait serverAsync -- block until async exception
Expand Down
4 changes: 2 additions & 2 deletions ouroboros-network/io-tests/Test/Ouroboros/Network/Socket.hs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ demo chain0 updates = withIOManager $ \iocp -> do
diffusionMode = InitiatorAndResponderDiffusionMode,
peerSharing = PeerSharingDisabled,
query = False })
(SomeResponderApplication responderApp))
(\_ -> SomeResponderApplication responderApp))
nullErrorPolicies
$ \realProducerAddress _ -> do
withAsync
Expand All @@ -197,7 +197,7 @@ demo chain0 updates = withIOManager $ \iocp -> do
diffusionMode = InitiatorOnlyDiffusionMode,
peerSharing = PeerSharingDisabled,
query = False })
initiatorApp)
(\_ -> initiatorApp))
(Just consumerAddress)
realProducerAddress)
$ \ _connAsync -> do
Expand Down
4 changes: 2 additions & 2 deletions ouroboros-network/ouroboros-network.cabal
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: ouroboros-network
version: 0.19.0.1
version: 0.19.0.2
synopsis: A networking layer for the Ouroboros blockchain protocol
description: A networking layer for the Ouroboros blockchain protocol.
license: Apache-2.0
Expand Down Expand Up @@ -165,7 +165,7 @@ library
network-mux,
nothunks,
ouroboros-network-api ^>=0.12,
ouroboros-network-framework ^>=0.15,
ouroboros-network-framework ^>=0.16,
ouroboros-network-protocols ^>=0.13,
psqueues >=0.2.3 && <0.3,
random,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import GHC.IO.Exception as GHC (IOErrorType (..), IOException (..))
import System.Random (mkStdGen)

import Network.DNS.Types qualified as DNS
import Network.Mux.Trace qualified as Mx

import Ouroboros.Network.BlockFetch (PraosFetchMode (..),
TraceFetchClientState (..))
Expand Down Expand Up @@ -226,6 +227,7 @@ tests =
, testGroup "Peer Sharing"
[ testProperty "share a peer"
unit_peer_sharing
, testProperty "don't peershare the unwilling" (testWithIOSim prop_no_peershare_unwilling 100000)
]
, testGroup "Churn"
[ testProperty "no timeouts"
Expand Down Expand Up @@ -4328,6 +4330,32 @@ unit_local_root_diffusion_mode diffusionMode =
)
]

prop_no_peershare_unwilling:: SimTrace Void
-> Int
-> Property
prop_no_peershare_unwilling ioSimTrace traceNumber =
let events = Trace.toList
. fmap (\(WithTime t (WithName _ b)) -> (t, b))
. withTimeNameTraceEvents
@DiffusionTestTrace
@NtNAddr
. Trace.take traceNumber
$ ioSimTrace
in counterexample (List.intercalate "\n" $ map show events)
$ foldMap
(\case
(_, DiffusionInboundGovernorTrace (IG.TrMuxErrored _ err)) ->
case fromException err of
-- Technically we fail on more than the peersharing protocol.
-- Which is fine.
Just (Mx.UnknownMiniProtocol num) -> All
$ counterexample (show num) False
Just _ -> All True
Nothing -> All True
_ -> All True
)
events

-- Utils
--

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ import Ouroboros.Network.ConsensusMode
import Ouroboros.Network.Diffusion.P2P qualified as Diff.P2P
import Ouroboros.Network.Driver.Limits (ProtocolSizeLimits (..),
ProtocolTimeLimits (..))
import Ouroboros.Network.Handshake.Acceptable (Acceptable (acceptableVersion))
import Ouroboros.Network.InboundGovernor qualified as IG
import Ouroboros.Network.Mux (MiniProtocolLimits (..))
import Ouroboros.Network.NodeToNode.Version (DiffusionMode (..))
Expand All @@ -96,7 +97,6 @@ import Ouroboros.Network.Protocol.BlockFetch.Codec (byteLimitsBlockFetch,
timeLimitsBlockFetch)
import Ouroboros.Network.Protocol.ChainSync.Codec (ChainSyncTimeout (..),
byteLimitsChainSync, timeLimitsChainSync)
import Ouroboros.Network.Protocol.Handshake.Version (Accept (Accept))
import Ouroboros.Network.Protocol.KeepAlive.Codec (byteLimitsKeepAlive,
timeLimitsKeepAlive)
import Ouroboros.Network.Protocol.Limits (shortWait, smallByteLimit)
Expand Down Expand Up @@ -1092,9 +1092,7 @@ diffusionSimulation
readLocalRootPeers = readTVar lrpVar
readPublicRootPeers = return publicRoots
readUseLedgerPeers = return (UseLedgerPeers (After 0))

acceptVersion = \_ v -> Accept v

acceptVersion = acceptableVersion
defaultMiniProtocolsLimit :: MiniProtocolLimits
defaultMiniProtocolsLimit =
MiniProtocolLimits { maximumIngressQueue = 64000 }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import Ouroboros.Network.AnchoredFragment (Anchor (..))
import Ouroboros.Network.Block (HasFullHeader, SlotNo)
import Ouroboros.Network.Block qualified as Block
import Ouroboros.Network.BlockFetch
import Ouroboros.Network.Handshake.Acceptable (Accept (..), Acceptable (..))
import Ouroboros.Network.NodeToNode.Version (DiffusionMode (..))
import Ouroboros.Network.Protocol.Handshake.Unversioned
import Ouroboros.Network.Snocket (TestAddress (..))
Expand Down Expand Up @@ -141,6 +142,23 @@ data NtNVersionData = NtNVersionData
, ntnPeerSharing :: PeerSharing
}
deriving Show

instance Acceptable NtNVersionData where
acceptableVersion
NtNVersionData {
ntnDiffusionMode,
ntnPeerSharing
}
NtNVersionData {
ntnDiffusionMode = ntnDiffusionMode',
ntnPeerSharing = ntnPeerSharing'
}
=
Accept $ NtNVersionData {
ntnDiffusionMode = ntnDiffusionMode `min` ntnDiffusionMode',
ntnPeerSharing = ntnPeerSharing <> ntnPeerSharing'
}

type NtCAddr = TestAddress Int
type NtCVersion = UnversionedProtocol
type NtCVersionData = UnversionedProtocolData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,25 +265,26 @@ applications debugTracer nodeKernel
{ Diff.daApplicationInitiatorMode =
simpleSingletonVersions UnversionedProtocol
(NtNVersionData InitiatorOnlyDiffusionMode aaOwnPeerSharing)
initiatorApp
(\NtNVersionData {ntnPeerSharing} -> initiatorApp ntnPeerSharing)
, Diff.daApplicationInitiatorResponderMode =
simpleSingletonVersions UnversionedProtocol
(NtNVersionData aaDiffusionMode aaOwnPeerSharing)
initiatorAndResponderApp
(\NtNVersionData {ntnPeerSharing} -> initiatorAndResponderApp ntnPeerSharing)
, Diff.daLocalResponderApplication =
simpleSingletonVersions UnversionedProtocol
UnversionedProtocolData
localResponderApp
(\_ -> localResponderApp)
, Diff.daLedgerPeersCtx =
aaLedgerPeersConsensusInterface
, Diff.daUpdateOutboundConnectionsState =
aaUpdateOutboundConnectionsState
}
where
initiatorApp
:: OuroborosBundleWithExpandedCtx Mx.InitiatorMode NtNAddr ByteString m () Void
:: PSTypes.PeerSharing
-> OuroborosBundleWithExpandedCtx Mx.InitiatorMode NtNAddr ByteString m () Void
-- initiator mode will never run a peer sharing responder side
initiatorApp = fmap f <$> initiatorAndResponderApp
initiatorApp peerSharing = fmap f <$> initiatorAndResponderApp peerSharing
where
f :: MiniProtocolWithExpandedCtx Mx.InitiatorResponderMode NtNAddr ByteString m () ()
-> MiniProtocolWithExpandedCtx Mx.InitiatorMode NtNAddr ByteString m () Void
Expand All @@ -299,8 +300,9 @@ applications debugTracer nodeKernel
}

initiatorAndResponderApp
:: OuroborosBundleWithExpandedCtx Mx.InitiatorResponderMode NtNAddr ByteString m () ()
initiatorAndResponderApp = TemperatureBundle
:: PSTypes.PeerSharing
-> OuroborosBundleWithExpandedCtx Mx.InitiatorResponderMode NtNAddr ByteString m () ()
initiatorAndResponderApp peerSharing = TemperatureBundle
{ withHot = WithHot
[ MiniProtocol
{ miniProtocolNum = chainSyncMiniProtocolNum
Expand Down Expand Up @@ -330,25 +332,27 @@ applications debugTracer nodeKernel
}
]
, withEstablished = WithEstablished $
[ MiniProtocol
MiniProtocol
{ miniProtocolNum = keepAliveMiniProtocolNum
, miniProtocolLimits = keepAliveLimits limits
, miniProtocolRun =
InitiatorAndResponderProtocol
keepAliveInitiator
keepAliveResponder
}
] ++ if aaOwnPeerSharing /= PSTypes.PeerSharingDisabled
then [ MiniProtocol
{ miniProtocolNum = peerSharingMiniProtocolNum
, miniProtocolLimits = peerSharingLimits limits
, miniProtocolRun =
InitiatorAndResponderProtocol
peerSharingInitiator
(peerSharingResponder (nkPeerSharingAPI nodeKernel))
}
]
else []
: case peerSharing of
PSTypes.PeerSharingEnabled ->
[ MiniProtocol
{ miniProtocolNum = peerSharingMiniProtocolNum
, miniProtocolLimits = peerSharingLimits limits
, miniProtocolRun =
InitiatorAndResponderProtocol
peerSharingInitiator
(peerSharingResponder (nkPeerSharingAPI nodeKernel))
}
]
PSTypes.PeerSharingDisabled ->
[]
}

localResponderApp
Expand Down
3 changes: 2 additions & 1 deletion ouroboros-network/src/Ouroboros/Network/NodeToClient.hs
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,9 @@ data NodeToClientProtocols appType ntcAddr bytes m a b = NodeToClientProtocols {
nodeToClientProtocols
:: NodeToClientProtocols appType addr bytes m a b
-> NodeToClientVersion
-> NodeToClientVersionData
-> OuroborosApplicationWithMinimalCtx appType addr bytes m a b
nodeToClientProtocols protocols _version =
nodeToClientProtocols protocols _version _versionData =
OuroborosApplication $
case protocols of
NodeToClientProtocols {
Expand Down
Loading
Loading