Skip to content

Commit 81bd006

Browse files
bugfix tracer
Address review comments re: ViewPatterns
1 parent 63873d1 commit 81bd006

File tree

1 file changed

+38
-23
lines changed

1 file changed

+38
-23
lines changed

ouroboros-network-framework/src/Ouroboros/Network/InboundGovernor.hs

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
{-# LANGUAGE GADTs #-}
77
{-# LANGUAGE KindSignatures #-}
88
{-# LANGUAGE LambdaCase #-}
9-
{-# LANGUAGE MultiWayIf #-}
109
{-# LANGUAGE NamedFieldPuns #-}
1110
{-# LANGUAGE RankNTypes #-}
1211
{-# LANGUAGE ScopedTypeVariables #-}
1312
{-# LANGUAGE TypeOperators #-}
14-
{-# LANGUAGE ViewPatterns #-}
1513

1614
-- 'runResponder' is using a redundant constraint.
1715
{-# OPTIONS_GHC -Wno-redundant-constraints #-}
@@ -46,7 +44,7 @@ import Control.Applicative (Alternative)
4644
import Control.Concurrent.Class.MonadSTM qualified as LazySTM
4745
import Control.Concurrent.Class.MonadSTM.Strict
4846
import Control.Exception (SomeAsyncException (..))
49-
import Control.Monad (foldM, forM_, forever, when)
47+
import Control.Monad (foldM, forM_, forever)
5048
import Control.Monad.Class.MonadAsync
5149
import Control.Monad.Class.MonadFork
5250
import Control.Monad.Class.MonadThrow
@@ -221,25 +219,33 @@ with
221219
check . Map.member peer . connections =<< readTVar stateVar
222220
modifyTVar countersVar $ Map.insert peer (ResponderCounters 0 0)
223221

224-
(startWithID -> Just mid) -> atomically do
222+
_ | Just mid <- startWithID trace -> atomically do
225223
connections <- connections <$> readTVar stateVar
226224
case Map.lookup peer connections of
227225
Nothing -> modifyTVar countersVar $ Map.delete peer
228226
Just connState -> do
229227
ResponderCounters {numTraceHotResponders,
230228
numTraceWarmResponders}
231229
<- (Map.! peer) <$> readTVar countersVar
232-
case getProtocolTemp mid connState of
233-
Hot -> do
234-
when (numTraceHotResponders == 0) $
235-
InfoChannel.writeMessage infoChannel $ RemotePromotedToHot peer
236-
adjustHotResponders succ peer
237-
_rest -> do
238-
when (numTraceWarmResponders + numTraceHotResponders == 0) $
239-
InfoChannel.writeMessage infoChannel $ AwakeRemote peer
240-
adjustWarmResponders succ peer
241-
242-
(terminateWithID -> Just mid) -> atomically do
230+
let miniProtocolTemp = getProtocolTemp mid connState
231+
case ( miniProtocolTemp
232+
, numTraceWarmResponders
233+
, numTraceHotResponders) of
234+
(Hot, 0, 0) -> do
235+
InfoChannel.writeMessage infoChannel $ AwakeRemote peer
236+
InfoChannel.writeMessage infoChannel $ RemotePromotedToHot peer
237+
(Hot, _, 0) ->
238+
InfoChannel.writeMessage infoChannel $ RemotePromotedToHot peer
239+
(Hot, _, _) -> pure ()
240+
(_notHot, 0, 0) -> do
241+
InfoChannel.writeMessage infoChannel $ AwakeRemote peer
242+
_otherwise -> pure ()
243+
244+
case miniProtocolTemp of
245+
Hot -> adjustHotResponders succ peer
246+
_warm -> adjustWarmResponders succ peer
247+
248+
_ | Just mid <- terminateWithID trace -> atomically do
243249
connections <- connections <$> readTVar stateVar
244250
case Map.lookup peer connections of
245251
Nothing -> modifyTVar countersVar $ Map.delete peer
@@ -253,16 +259,25 @@ with
253259
let miniProtocolTemp = getProtocolTemp mid connState
254260
case trace of
255261
Mux.TraceCleanExit {} -> do
262+
case ( getProtocolTemp mid connState
263+
, numTraceWarmResponders
264+
, numTraceHotResponders) of
265+
(Hot, 0, 1) -> do
266+
InfoChannel.writeMessage infoChannel $ RemoteDemotedToWarm peer
267+
InfoChannel.writeMessage infoChannel $ WaitIdleRemote peer
268+
(Hot, _, 1) ->
269+
InfoChannel.writeMessage infoChannel $ RemoteDemotedToWarm peer
270+
(Hot, _, _) -> pure ()
271+
(_notHot, 1, 0) ->
272+
InfoChannel.writeMessage infoChannel $ WaitIdleRemote peer
273+
_otherwise -> pure ()
274+
256275
case miniProtocolTemp of
257276
Hot -> adjustHotResponders pred peer
258277
_rest -> adjustWarmResponders pred peer
259-
if | numTraceHotResponders + numTraceWarmResponders == 1 ->
260-
InfoChannel.writeMessage infoChannel $ WaitIdleRemote peer
261-
| numTraceHotResponders == 1
262-
, Hot <- miniProtocolTemp ->
263-
InfoChannel.writeMessage infoChannel $ RemoteDemotedToWarm peer
264-
| otherwise -> return ()
265-
_otherwise -> return ()
278+
279+
_otherwise -> return () -- muxStopped _should_ be on the queue
280+
266281
InfoChannel.writeMessage infoChannel $
267282
MiniProtocolTerminated $ Terminated {
268283
tConnId = peer,
@@ -271,7 +286,7 @@ with
271286
tDataFlow = connectionDataFlow csVersionData,
272287
tResult = csCompletionMap Map.! mid }
273288

274-
(muxStopped -> True) -> atomically do
289+
_ | True <- muxStopped trace -> atomically do
275290
State { connections } <- readTVar stateVar
276291
case Map.lookup peer connections of
277292
Just ConnectionState {csMux} ->

0 commit comments

Comments
 (0)