Skip to content

Commit

Permalink
p2p-governor: improved logging
Browse files Browse the repository at this point in the history
TracePromoteWarmFailed - show target & number of active peers
TracePromoteWarmDone   - show target & number of active peers
TraceDemoteHotFailed   - show target & number of active peers
TraceDemoteHotDone     - show target & number of active peers
TracePromoteColdFailed - show target & number of established peers
TracePromoteColdDone   - show target & number of established peers
TraceDemoteWarmFailed  - show target & number of established peers
TraceDemoteWarmDone    - show target & number of established peers
  • Loading branch information
coot authored and karknu committed Jan 26, 2021
1 parent 3493e2e commit 98c6093
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 52 deletions.
Expand Up @@ -115,8 +115,16 @@ jobPromoteWarmPeer PeerSelectionActions{peerStateActions = PeerStateActions {act
handler e =
--TODO: decide what happens if promotion fails, do we stay warm or go to
-- cold? Will this be reported asynchronously via the state monitoring?
Completion $ \st _now -> Decision {
decisionTrace = TracePromoteWarmFailed peeraddr e,
Completion $ \st@PeerSelectionState {
activePeers,
targets = PeerSelectionTargets {
targetNumberOfActivePeers
}
}
_now -> Decision {
decisionTrace = TracePromoteWarmFailed targetNumberOfActivePeers
(Set.size activePeers)
peeraddr e,
decisionState = st {
inProgressPromoteWarm = Set.delete peeraddr
(inProgressPromoteWarm st)
Expand All @@ -129,13 +137,21 @@ jobPromoteWarmPeer PeerSelectionActions{peerStateActions = PeerStateActions {act
--TODO: decide if we should do timeouts here or if we should make that
-- the responsibility of activatePeerConnection
activatePeerConnection peerconn
return $ Completion $ \st _now ->
assert (peeraddr `EstablishedPeers.member` establishedPeers st)
return $ Completion $ \st@PeerSelectionState {
activePeers,
targets = PeerSelectionTargets {
targetNumberOfActivePeers
}
}
_now ->
assert (peeraddr `EstablishedPeers.member` establishedPeers st) $
let activePeers' = Set.insert peeraddr activePeers in
Decision {
decisionTrace = TracePromoteWarmDone peeraddr,
decisionTrace = TracePromoteWarmDone targetNumberOfActivePeers
(Set.size activePeers')
peeraddr,
decisionState = st {
activePeers = Set.insert peeraddr
(activePeers st),
activePeers = activePeers',
establishedPeers = EstablishedPeers.updateStatus
peeraddr PeerHot
(establishedPeers st),
Expand Down Expand Up @@ -228,8 +244,15 @@ jobDemoteActivePeer PeerSelectionActions{peerStateActions = PeerStateActions {de
-- the state where we believed these peers are still warm, since then we
-- can have another go at the ones we didn't yet try to close, or perhaps
-- it'll be closed for other reasons and our monitoring will notice it.
Completion $ \st _now -> Decision {
decisionTrace = TraceDemoteHotFailed peeraddr e,
Completion $ \st@PeerSelectionState {
activePeers,
targets = PeerSelectionTargets {
targetNumberOfActivePeers
}
}
_now -> Decision {
decisionTrace = TraceDemoteHotFailed targetNumberOfActivePeers
(Set.size activePeers) peeraddr e,
decisionState = st {
inProgressDemoteHot = Set.delete peeraddr
(inProgressDemoteHot st)
Expand All @@ -240,13 +263,21 @@ jobDemoteActivePeer PeerSelectionActions{peerStateActions = PeerStateActions {de
job :: m (Completion m peeraddr peerconn)
job = do
deactivatePeerConnection peerconn
return $ Completion $ \st _now ->
assert (peeraddr `EstablishedPeers.member` establishedPeers st)
return $ Completion $ \st@PeerSelectionState {
activePeers,
targets = PeerSelectionTargets {
targetNumberOfActivePeers
}
}
_now ->
assert (peeraddr `EstablishedPeers.member` establishedPeers st) $
let activePeers' = Set.delete peeraddr activePeers in
Decision {
decisionTrace = TraceDemoteHotDone peeraddr,
decisionTrace = TraceDemoteHotDone targetNumberOfActivePeers
(Set.size activePeers')
peeraddr,
decisionState = st {
activePeers = Set.delete peeraddr
(activePeers st),
activePeers = activePeers',
establishedPeers = EstablishedPeers.updateStatus peeraddr PeerWarm
(establishedPeers st),
inProgressDemoteHot = Set.delete peeraddr
Expand Down
Expand Up @@ -120,7 +120,13 @@ jobPromoteColdPeer PeerSelectionActions{peerStateActions = PeerStateActions {est
where
handler :: SomeException -> Completion m peeraddr peerconn
handler e =
Completion $ \st now ->
Completion $ \st@PeerSelectionState {
establishedPeers,
targets = PeerSelectionTargets {
targetNumberOfEstablishedPeers
}
}
now ->
let (failCount, knownPeers') = KnownPeers.incrementFailCount
peeraddr
(knownPeers st)
Expand All @@ -131,7 +137,9 @@ jobPromoteColdPeer PeerSelectionActions{peerStateActions = PeerStateActions {est
2 ^ (pred failCount `min` maxColdPeerRetryBackoff) * baseColdPeerRetryDiffTime
in
Decision {
decisionTrace = TracePromoteColdFailed peeraddr delay e,
decisionTrace = TracePromoteColdFailed targetNumberOfEstablishedPeers
(EstablishedPeers.size establishedPeers)
peeraddr delay e,
decisionState = st {
knownPeers = KnownPeers.setConnectTime
(Set.singleton peeraddr)
Expand All @@ -148,19 +156,29 @@ jobPromoteColdPeer PeerSelectionActions{peerStateActions = PeerStateActions {est
--TODO: decide if we should do timeouts here or if we should make that
-- the responsibility of establishPeerConnection
peerconn <- establishPeerConnection peeraddr
return $ Completion $ \st _now -> Decision {
decisionTrace = TracePromoteColdDone peeraddr,
decisionState = st {
establishedPeers = EstablishedPeers.insert peeraddr peerconn
(establishedPeers st),
inProgressPromoteCold = Set.delete peeraddr
(inProgressPromoteCold st),
knownPeers = KnownPeers.resetFailCount
peeraddr
(knownPeers st)
},
decisionJobs = []
}
return $ Completion $ \st@PeerSelectionState {
establishedPeers,
targets = PeerSelectionTargets {
targetNumberOfEstablishedPeers
}
}
_now ->
let establishedPeers' = EstablishedPeers.insert peeraddr peerconn
establishedPeers
in Decision {
decisionTrace = TracePromoteColdDone targetNumberOfEstablishedPeers
(EstablishedPeers.size establishedPeers')
peeraddr,
decisionState = st {
establishedPeers = establishedPeers',
inProgressPromoteCold = Set.delete peeraddr
(inProgressPromoteCold st),
knownPeers = KnownPeers.resetFailCount
peeraddr
(knownPeers st)
},
decisionJobs = []
}


---------------------------------
Expand Down Expand Up @@ -259,8 +277,16 @@ jobDemoteEstablishedPeer PeerSelectionActions{peerStateActions = PeerStateAction
-- the state where we believed this peer is still warm, since then we
-- can have another go or perhaps it'll be closed for other reasons and
-- our monitoring will notice it.
Completion $ \st _now -> Decision {
decisionTrace = TraceDemoteWarmFailed peeraddr e,
Completion $ \st@PeerSelectionState {
establishedPeers,
targets = PeerSelectionTargets {
targetNumberOfEstablishedPeers
}
}
_now -> Decision {
decisionTrace = TraceDemoteWarmFailed targetNumberOfEstablishedPeers
(EstablishedPeers.size establishedPeers)
peeraddr e,
decisionState = st {
inProgressDemoteWarm = Set.delete peeraddr
(inProgressDemoteWarm st)
Expand All @@ -271,13 +297,23 @@ jobDemoteEstablishedPeer PeerSelectionActions{peerStateActions = PeerStateAction
job :: m (Completion m peeraddr peerconn)
job = do
closePeerConnection peerconn
return $ Completion $ \st _now -> Decision {
decisionTrace = TraceDemoteWarmDone peeraddr,
decisionState = st {
establishedPeers = EstablishedPeers.delete peeraddr
(establishedPeers st),
inProgressDemoteWarm = Set.delete peeraddr
(inProgressDemoteWarm st)
},
decisionJobs = []
}
return $ Completion $ \st@PeerSelectionState {
establishedPeers,
targets = PeerSelectionTargets {
targetNumberOfEstablishedPeers
}
}
_now ->
let establishedPeers' = EstablishedPeers.delete peeraddr
establishedPeers
in Decision {
decisionTrace = TraceDemoteWarmDone targetNumberOfEstablishedPeers
(EstablishedPeers.size establishedPeers')
peeraddr,
decisionState = st {
establishedPeers = establishedPeers',
inProgressDemoteWarm = Set.delete peeraddr
(inProgressDemoteWarm st)
},
decisionJobs = []
}
Expand Up @@ -420,21 +420,37 @@ data TracePeerSelection peeraddr =
| TracePublicRootsRequest Int Int
| TracePublicRootsResults (Set peeraddr) Int DiffTime
| TracePublicRootsFailure SomeException Int DiffTime
| TraceGossipRequests Int Int (Set peeraddr) (Set peeraddr) -- target, actual, selected
-- | target known peers, actual known peers, peers available for gossip,
-- peers selected for gossip
| TraceGossipRequests Int Int (Set peeraddr) (Set peeraddr)
| TraceGossipResults [(peeraddr, Either SomeException [peeraddr])] --TODO: classify failures
| TraceForgetColdPeers Int Int (Set peeraddr) -- target, actual, selected
-- | target known peers, actual known peers, selected peers
| TraceForgetColdPeers Int Int (Set peeraddr)
-- | target established, actual established, selected peers
| TracePromoteColdPeers Int Int (Set peeraddr)
| TracePromoteColdFailed peeraddr DiffTime SomeException
| TracePromoteColdDone peeraddr
-- | target established, actual established, peer, delay until next
-- promotion, reason
| TracePromoteColdFailed Int Int peeraddr DiffTime SomeException
-- | target established, actual established, peer
| TracePromoteColdDone Int Int peeraddr
-- | target active, actual active, selected peers
| TracePromoteWarmPeers Int Int (Set peeraddr)
| TracePromoteWarmFailed peeraddr SomeException
| TracePromoteWarmDone peeraddr
| TraceDemoteWarmPeers Int Int (Set peeraddr) -- target, actual, selected
| TraceDemoteWarmFailed peeraddr SomeException
| TraceDemoteWarmDone peeraddr
-- | target active, actual active, peer, reason
| TracePromoteWarmFailed Int Int peeraddr SomeException
-- | target active, actual active, peer
| TracePromoteWarmDone Int Int peeraddr
-- | target established, actual established, selected peers
| TraceDemoteWarmPeers Int Int (Set peeraddr)
-- | target established, actual established, peer, reason
| TraceDemoteWarmFailed Int Int peeraddr SomeException
-- | target established, actual established, peer
| TraceDemoteWarmDone Int Int peeraddr
-- | target active, actual active, selected peers
| TraceDemoteHotPeers Int Int (Set peeraddr)
| TraceDemoteHotFailed peeraddr SomeException
| TraceDemoteHotDone peeraddr
-- | target active, actual active, peer, reason
| TraceDemoteHotFailed Int Int peeraddr SomeException
-- | target active, actual active, peer
| TraceDemoteHotDone Int Int peeraddr
| TraceDemoteAsynchronous (Map peeraddr PeerStatus)
| TraceGovernorWakeup
deriving Show
Expand Down

0 comments on commit 98c6093

Please sign in to comment.