-
Renamed
ReconnectDelay
toRepromoteDelay
- the dalay is used after demotion tocold
as well aswarm
state. AReconnectDelay
type alias is still provided but deprecated. -
Changed pipelining parameters in
MiniProtocolParameters
fromWord32
toWord16
to match the types elsewhere.
- The internal
Guarded
type changed. It is provided with pattern synonyms which hide bothMin
andFirstToFinish
. - Adds 'unit_reconnect' testnet test
- When churning split restoring known peers and established peers targets into two separate steps.
- Fix
KnownPeers.insert
function semantic bug where it could easily misused, overwriting values. - Made (light) peer sharing results advertisable unless already known
- Peer sharing is now delayed for 5minutes for newly established peers.
policyPeerShareRetryTime
to 900s
- Use
checked-strict-vars-0.2.0.0
. - ghc-9.8 support.
This release is based directly on top of ouroboros-network-0.10.1.0
.
- Fixed a bug in
outbound-governor
: PR #4748. In rare cases the Outbound Governor could lose track of a connection, and thus not being able to reconnect to a remote peer.
Deprecated release.
- Fixed a bug in
outbound-governor
: PR #4748. In rare cases the Outbound Governor could lose track of a connection, and thus not being able to reconnect to a remote peer.
- Fix random selection of peers to peer share with.
- Fix asynchronous demotions to
Cold
(CoolingToCold
) not being noticed, hence making peers stay in theinProgressDemotedToCold
set forever. - Fixed bug where peers with
DoNotAdvertisePeer
flag were being shared - Fixed peer sharing pool of peers to be shared being confused with the pool of peers to request to.
- Use
io-sim-1.3.0.0
.
- Make chainsync idle timeout configurable.
-
Updated types to accommodate
PeerSharing
data type changes. -
Fixed PeerSharing IPv6 enc/decoding
-
Introduce NodeToNodeVersion 13
-
Updated types to accommodate
PeerSharing
data type changes:PeerSharingPrivate
got removed and hence, handshake is now symmetric, fixing issue #4642- This implies that newer peer sharing node versions will see older
version's
PeerSharingPrivate
asPeerSharingEnabled
. So older version node's should not rely onPeerSharingPrivate
semantics from newer version honest nodes.
-
Changed encoding of IPv6 addresses sent over
PeerSharing
mini-protocol.
- Refactors
PeerSelection.RootPeersDNS
module, enabling more sharing between modules and providing just better module organisation overall.- Tweaks exports and imports
- Shares semaphores with
withPeerSelectionActions
andledgerPeersThread
-
Updated KeepAlive client to collect a rtt sample for the first packet.
-
Less aggresive churning of established and known peers.
-
Added peer sharing to wireshark dissector.
-
Added ledger peers to diffusion simulation
-
Fixed diffusion tests.
-
demo-chain-sync
: added option parser, added new options. -
Lifted
chainGenerator
to beInfinite
. -
Strengthened precondition in
pickPeers
to check that the peers to be picked from are a subset of thePeerSelectionState
used to analyze them.- This is non-breaking because it reflects the current reality of how peers
are chosen from
PeerSelectionState
.
- This is non-breaking because it reflects the current reality of how peers
are chosen from
-
Restructured
txSubmissionOutbound
to prevent an impossible case and eliminate the associated error. -
Increase keyed timeout on a testnet test that was failing.
-
Adds new constructor to
PeerStatus
:PeerCooling
. This is in order to fix a possible race where a node would be asynchronously demoted to cold state, put into the cold set and wrongly forgotten, while its connection was not yet cleaned up. This could lead to the peer being added to the known set and promoted leading to aTrConnectionExists
trace in the logs, which is disallowed. With this being said,PeerCold
status is now an intermediate status that means the peer is cold but its connection still lingers. This extra information warns the governor not to move the peer to the cold set just yet.Yes it can mean that the governor could promote the peer to hot, however it will promptly fail since no mux will be running anyway.
- Removes
updatePeerSharing
fromKnownPeers
module API
- Disable light peer sharing if peer sharing is not enabled.
- Do not use light peer sharing in
node-to-client
case (which leads to a memory leak). - Split
test
component intoio-tests
andsim-tests
.
-
The counters logged by
PeerSelectionCounters
for local root peers are now the number of warm and hot peers per group (before the first one was the target of the given group). -
Introduced big ledger peers to the outbound governor. The breaking changes include:
-
Added new targets to
PeerSelectionTargets
data type -
Added
requestBigLedgerPeers
toPeerSelectionActions
. -
establishPeerConnection
andativatePeerConnection
receive anIsLedgerPeer
argument (which is then passed to mini-protocols viaExtendedInitiatorContext
. -
The
PeerSelectionState
contains new fields to support big ledger peers. -
Modified
PickPolicy
type, it is now parametrised by monadm
rather than by anstm
monad. With this change the type alias can be used inpickPeers
type signature. -
TraceLedgerPeers
renamed some constructors:PickedPeer -> PickedLedgerPeer
PickedPeers -> PickedLedgerPeers
; added new ones:PickedBigLedgerPeer
PickedBigLedgerPeers
; andFetchingNewLedgerState
constructor has a new field: number of big ledger peers.
-
-
Propagated changes from
ouroboros-network-framework
related to the introduction of initiator and responder contexts toRunMiniProtocol
data type. These changes include breaking changes to the following APIs:Ouroboros.Network.Diffusion
is using:OuroborosBundleWithExpandedCtx
for node-to-node applications,OuroborosApplicationWithMinimalCtx
for node-to-client responders.Ouroboros.Network.NodeToNode
exportsMinimalInitiatorContext
andExpandedInitiatorContext
data types.Ouroboros.Network.NodeToClient
exportsMinimalInitiatorContext
andResponderContext
data types.Ouroboros.Network.NodeToNode.NodeToNodeProtocols
,Ouroboros.Network.NodeToNode.nodeToNodeProtocols
,Ouroboros.Network.NodeToNode.versionedNodeToClientProtocols
,Ouroboros.Network.NodeToNode.withServer
were modified.Ouroboros.Network.NodeToClient.NodeToClientProtocols
,Ouroboros.Network.NodeToClient.nodeToClientProtocols
,Ouroboros.Network.NodeToClient.versionedNodeToClientProtocols
,Ouroboros.Network.NodeToClient.withServer
,Ouroboros.Network.NodeToClient.ipSubscriptionWorker
,Ouroboros.Network.NodeToClient.dnsSubscriptionWorker
were modified.
-
Fixed a small memory leak in
PeerMetrics
(#4633). -
The counters logged by
PeerSelectionCounters
for local root peers are now the number of warm and hot peers per group (before the first one was the target of the given group). -
Added
getNumberOfPeers
destructor ofNumberOfPeers
. -
Added
NotEnoughBigLedgerPeers
andNotEnoughLedgerPeers
constructors ofTraceLedgerPeers
; RenamedFallingBackToBootstrapPeers
asFallingBackToPublicRootPeers
.
- light peer sharing
- Added
TraceKnownInboundConnection
constructor toTracePeerSelection
- Added
readNewInboundConnection
field toPeerSelectionActions
record.
- Added
- The constructor
FetchDeclineChainNoIntersection
was renamed toFetchDeclineChainIntersectionTooDeep
(#4541) - Include Warm Valency for Local Root Peers
TraceLedgerPeers
renamed some constructors:PickedPeer -> PickedLedgerPeer
PickedPeers -> PickedLedgerPeers
; added new ones:PickedBigLedgerPeer
PickedBigLedgerPeers
; andFetchingNewLedgerState
constructor has a new field: number of big ledger peers.
- Support for decoding Handshake Query Reply in wireshark dissector.
- Support for decoding CBOR payload in wireshark dissector.
- Limit concurrency used by dns resolution. We only resolve up to 8 dns names concurrently for public / ledger peers and up to 2 for local root peers. This will affect how quickly node connects to ledger peers when it starts.
- Improved memory footprint of peer metrics (#4620)
- Initialise local root peers results
TVar
(#4584).
- Do not wrap
ExitCode
inDiffusionError
wrapper.
- Export
Ouroboros.Network.Diffusion.Failiure
constructors.
- Changed how DNS for local root peers works
- Change TraceLocalRootPeersTrace to include TraceLocalRootDNSMap constructor;
- Change TraceLocalRootGroups constructor type;
- Change localRootPeersProvider type signature;
- Updated tests to reflect the above changes.
- Updated to use
ouroboros-network-api-0.5.0.0
.
- Added
DiffusionError
constructor ofOuroboros.Network.Diffusion.Failure
which kind is nowType
.
- Compatible with
ouroboros-network-framework-0.6.0.0
andouroboros-network-api-0.4.0.0
- Use
io-classes-1.1
.
ghc-9.4
andghc-9.6
compatiblity.
-
Integration of latest
cardano-ledger
andcardano-base
. -
Add Peer Sharing feature:
Peer Sharing is a new miniprotocol where nodes can share peer addresses, in order to discover new peers. It is only used if enabled. It should be disabled by default. Please read this design plan to understand the rationale and how Peer Sharing works with more detail: https://github.com/intersectmbo/ouroboros-network/wiki/Peer-Sharing-Implementation-Plan
This new feature includes the following changes:
- Peer Sharing - MiniProtocol
- Refactor KnownPeers and EstablishedPeers
- Refactor old "gossip" Peer Selection mechanism.
- Changes to Handshake
- Add new NodeToNode version
- Add PeerSharing to RunNodeArgs and NodeToNodeVersionData
- Add versionData (agreedOptions) to ConnectionHandler
- Add versionData to PeerConnectionHandle
- New CDDL tests
- Fix interop problems between NonP2P and P2P nodes (PR #4465)
- Refactors requestPublicRootPeers to include PeerAdvertise
- Public Roots Peer Advertise value is now used
- Implement ChainDB to fix header-body split in Diffusion Tests
- Fix DNS issue #4491
- Fixed bugs in peer state actions & testing framework (PR #4385)
- Packages where reorganised:
ouroboros-network-api
: a common api fornetwork
&consensus
packagesouroboros-network-mock
: a mock chain which is used for testing purposesouroboros-network-protocols
: implementation & tests of all mini-protocols. It contains two public libraries: *ouroboros-network-protocols
*ouroboros-network-protocols:testlib
- Moved the
ipv6
cabal flag toouroboros-network-framework
package. - Build with
ghc-9.2
.
- Fix interop problems between NonP2P and P2P nodes (PR #4465)
- Initial experiments and prototyping