@@ -18,6 +18,7 @@ import Control.Concurrent.Class.MonadMVar.Strict
1818import Control.Concurrent.Class.MonadSTM.Strict
1919import Control.Monad.Class.MonadThrow
2020import Control.Monad.Class.MonadTimer.SI
21+ import Control.Tracer (Tracer (.. ), traceWith )
2122
2223import Data.Foldable (foldl' , traverse_ )
2324import Data.Map.Strict (Map )
@@ -84,15 +85,17 @@ withPeer
8485 , Ord peeraddr
8586 , Show peeraddr
8687 )
87- => TxChannelsVar m peeraddr txid tx
88+ => Tracer m (DebugSharedTxState peeraddr txid tx )
89+ -> TxChannelsVar m peeraddr txid tx
8890 -> SharedTxStateVar m peeraddr txid tx
8991 -> TxSubmissionMempoolReader txid tx idx m
9092 -> peeraddr
9193 -- ^ new peer
9294 -> (PeerTxAPI m txid tx -> m a )
9395 -- ^ callback which gives access to `PeerTxStateAPI`
9496 -> m a
95- withPeer channelsVar
97+ withPeer tracer
98+ channelsVar
9699 sharedStateVar
97100 TxSubmissionMempoolReader { mempoolGetSnapshot }
98101 peeraddr io =
@@ -188,7 +191,8 @@ withPeer channelsVar
188191 -- TODO: hide this inside `receivedTxIds` so it's run in the same STM
189192 -- transaction.
190193 mempoolSnapshot <- atomically mempoolGetSnapshot
191- receivedTxIds sharedStateVar
194+ receivedTxIds tracer
195+ sharedStateVar
192196 mempoolSnapshot
193197 peeraddr
194198 numTxIdsToReq
@@ -202,7 +206,7 @@ withPeer channelsVar
202206 -- ^ received txs
203207 -> m ()
204208 handleReceivedTxs txids txs =
205- collectTxs sharedStateVar peeraddr txids txs
209+ collectTxs tracer sharedStateVar peeraddr txids txs
206210
207211
208212decisionLogicThread
@@ -213,20 +217,21 @@ decisionLogicThread
213217 , Ord peeraddr
214218 , Ord txid
215219 )
216- => TxDecisionPolicy
220+ => Tracer m (DebugSharedTxState peeraddr txid tx )
221+ -> TxDecisionPolicy
217222 -> StrictTVar m (Map peeraddr PeerGSV )
218223 -> TxChannelsVar m peeraddr txid tx
219224 -> SharedTxStateVar m peeraddr txid tx
220225 -> m Void
221- decisionLogicThread policy gsvVar txChannelsVar sharedStateVar = go
226+ decisionLogicThread tracer policy gsvVar txChannelsVar sharedStateVar = go
222227 where
223228 go :: m Void
224229 go = do
225230 -- We rate limit the decision making process, it could overwhelm the CPU
226231 -- if there are too many inbound connections.
227232 threadDelay 0.005 -- 5ms
228233
229- decisions <- atomically do
234+ ( decisions, st) <- atomically do
230235 sharedCtx <-
231236 SharedDecisionContext
232237 <$> readTVar gsvVar
@@ -238,7 +243,8 @@ decisionLogicThread policy gsvVar txChannelsVar sharedStateVar = go
238243
239244 let (sharedState, decisions) = makeDecisions policy sharedCtx activePeers
240245 writeTVar sharedStateVar sharedState
241- return decisions
246+ return (decisions, sharedState)
247+ traceWith tracer (DebugSharedTxState st)
242248 TxChannels { txChannelMap } <- readMVar txChannelsVar
243249 traverse_
244250 (\ (mvar, d) -> modifyMVar_ mvar (\ d' -> pure (d' <> d)))
0 commit comments