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

Delay peersharing #4735

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions ouroboros-network/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
### Non-breaking changes

* Fix random selection of peers to peershare with.
* Reduce peersharing retry from 1h to 15m.
* Delay peersharing with newly established peers until they have been around
for 5 minutes.

## 0.10.0.1 -- 2023-11-16

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3036,6 +3036,7 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains peerSharing = do
policyPeerShareRetryTime = 0, -- seconds
policyPeerShareBatchWaitTime = 0, -- seconds
policyPeerShareOverallTimeout = 0, -- seconds
policyPeerShareActivationDelay = 1, -- seconds
policyErrorDelay = 0 -- seconds
}
pickTrivially :: Applicative m => Set SockAddr -> Int -> m (Set SockAddr)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,7 @@ mockPeerSelectionPolicy GovernorMockEnvironment {
policyPeerShareRetryTime = 3600, -- seconds
policyPeerShareBatchWaitTime = 3, -- seconds
policyPeerShareOverallTimeout = 10, -- seconds
policyPeerShareActivationDelay = 300, -- seconds
policyErrorDelay = 10 -- seconds
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,10 @@ simplePeerSelectionPolicy rngVar getChurnMode metrics errorDelay = PeerSelection

policyFindPublicRootTimeout = 5, -- seconds
policyMaxInProgressPeerShareReqs = 2,
policyPeerShareRetryTime = 3600, -- seconds
policyPeerShareRetryTime = 900, -- seconds
policyPeerShareBatchWaitTime = 3, -- seconds
policyPeerShareOverallTimeout = 10, -- seconds
policyPeerShareActivationDelay = 300, -- seconds

policyErrorDelay = ExitPolicy.reconnectDelay errorDelay
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ belowTargetLocal :: forall peeraddr peerconn m.
=> PeerSelectionActions peeraddr peerconn m
-> MkGuardedDecision peeraddr peerconn m
belowTargetLocal actions
PeerSelectionPolicy {
policy@PeerSelectionPolicy {
policyPickColdPeersToPromote
}
st@PeerSelectionState {
Expand Down Expand Up @@ -128,7 +128,7 @@ belowTargetLocal actions
inProgressPromoteCold = inProgressPromoteCold
<> selectedToPromote
},
decisionJobs = [ jobPromoteColdPeer actions peer IsNotBigLedgerPeer
decisionJobs = [ jobPromoteColdPeer actions policy peer IsNotBigLedgerPeer
| peer <- Set.toList selectedToPromote ]
}

Expand Down Expand Up @@ -168,7 +168,7 @@ belowTargetOther :: forall peeraddr peerconn m.
=> PeerSelectionActions peeraddr peerconn m
-> MkGuardedDecision peeraddr peerconn m
belowTargetOther actions
PeerSelectionPolicy {
policy@PeerSelectionPolicy {
policyPickColdPeersToPromote
}
st@PeerSelectionState {
Expand Down Expand Up @@ -218,7 +218,7 @@ belowTargetOther actions
inProgressPromoteCold = inProgressPromoteCold
<> selectedToPromote
},
decisionJobs = [ jobPromoteColdPeer actions peer IsNotBigLedgerPeer
decisionJobs = [ jobPromoteColdPeer actions policy peer IsNotBigLedgerPeer
| peer <- Set.toList selectedToPromote ]
}

Expand Down Expand Up @@ -246,7 +246,7 @@ belowTargetBigLedgerPeers :: forall peeraddr peerconn m.
=> PeerSelectionActions peeraddr peerconn m
-> MkGuardedDecision peeraddr peerconn m
belowTargetBigLedgerPeers actions
PeerSelectionPolicy {
policy@PeerSelectionPolicy {
policyPickColdPeersToPromote
}
st@PeerSelectionState {
Expand Down Expand Up @@ -297,7 +297,7 @@ belowTargetBigLedgerPeers actions
inProgressPromoteCold = inProgressPromoteCold
<> selectedToPromote
},
decisionJobs = [ jobPromoteColdPeer actions peer IsBigLedgerPeer
decisionJobs = [ jobPromoteColdPeer actions policy peer IsBigLedgerPeer
| peer <- Set.toList selectedToPromote ]
}

Expand Down Expand Up @@ -337,13 +337,16 @@ maxColdPeerRetryBackoff = 5
jobPromoteColdPeer :: forall peeraddr peerconn m.
(Monad m, Ord peeraddr)
=> PeerSelectionActions peeraddr peerconn m
-> PeerSelectionPolicy peeraddr m
-> peeraddr
-> IsBigLedgerPeer
-> Job () m (Completion m peeraddr peerconn)
jobPromoteColdPeer PeerSelectionActions {
peerStateActions = PeerStateActions {establishPeerConnection},
peerConnToPeerSharing
} peeraddr isBigLedgerPeer =
}
PeerSelectionPolicy { policyPeerShareActivationDelay }
peeraddr isBigLedgerPeer =
Job job handler () "promoteColdPeer"
where
handler :: SomeException -> m (Completion m peeraddr peerconn)
Expand Down Expand Up @@ -412,8 +415,9 @@ jobPromoteColdPeer PeerSelectionActions {
targetNumberOfEstablishedBigLedgerPeers
}
}
_now ->
now ->
let establishedPeers' = EstablishedPeers.insert peeraddr peerconn
(addTime policyPeerShareActivationDelay now)
establishedPeers
-- Update PeerSharing value in KnownPeers
knownPeers' = KnownPeers.insert (Map.singleton peeraddr (Just peerSharing, Nothing, Nothing))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ data PeerSelectionPolicy peeraddr m = PeerSelectionPolicy {
policyPeerShareOverallTimeout :: !DiffTime,
-- ^ Amount of time the overall batches of peer sharing requests are
-- allowed to take
policyPeerShareActivationDelay :: !DiffTime,
-- ^ Delay until we consider a peer suitable for peersharing

-- | Reconnection delay, passed from `ExitPolicy`.
--
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,20 +162,13 @@ member peeraddr = Map.member peeraddr . allPeers
insert :: Ord peeraddr
=> peeraddr
-> peerconn
-> Time
-> EstablishedPeers peeraddr peerconn
-> EstablishedPeers peeraddr peerconn
insert peeraddr peerconn ep@EstablishedPeers { allPeers, availableForPeerShare } =
ep { allPeers = Map.insert peeraddr peerconn allPeers,

-- The sets tracking peers ready for peer share need to be updated with any
-- /fresh/ peers, but any already present are ignored since they are
-- either already in these sets or they are in the corresponding PSQs,
-- for which we also preserve existing info.
availableForPeerShare =
if Map.member peeraddr allPeers
then availableForPeerShare
else Set.insert peeraddr availableForPeerShare
}
insert peeraddr peerconn peerShareAt ep@EstablishedPeers { allPeers } =
-- Newly established peers are available for peersharing after the specified delay.
setPeerShareTime (Set.singleton peeraddr) peerShareAt $
ep { allPeers = Map.insert peeraddr peerconn allPeers }

delete :: Ord peeraddr
=> peeraddr
Expand Down