@@ -18,6 +18,7 @@ import Control.Concurrent.Class.MonadMVar.Strict
18
18
import Control.Concurrent.Class.MonadSTM.Strict
19
19
import Control.Monad.Class.MonadThrow
20
20
import Control.Monad.Class.MonadTimer.SI
21
+ import Control.Tracer (Tracer (.. ), traceWith )
21
22
22
23
import Data.Foldable (foldl' , traverse_ )
23
24
import Data.Map.Strict (Map )
@@ -84,15 +85,17 @@ withPeer
84
85
, Ord peeraddr
85
86
, Show peeraddr
86
87
)
87
- => TxChannelsVar m peeraddr txid tx
88
+ => Tracer m (DebugSharedTxState peeraddr txid tx )
89
+ -> TxChannelsVar m peeraddr txid tx
88
90
-> SharedTxStateVar m peeraddr txid tx
89
91
-> TxSubmissionMempoolReader txid tx idx m
90
92
-> peeraddr
91
93
-- ^ new peer
92
94
-> (PeerTxAPI m txid tx -> m a )
93
95
-- ^ callback which gives access to `PeerTxStateAPI`
94
96
-> m a
95
- withPeer channelsVar
97
+ withPeer tracer
98
+ channelsVar
96
99
sharedStateVar
97
100
TxSubmissionMempoolReader { mempoolGetSnapshot }
98
101
peeraddr io =
@@ -188,7 +191,8 @@ withPeer channelsVar
188
191
-- TODO: hide this inside `receivedTxIds` so it's run in the same STM
189
192
-- transaction.
190
193
mempoolSnapshot <- atomically mempoolGetSnapshot
191
- receivedTxIds sharedStateVar
194
+ receivedTxIds tracer
195
+ sharedStateVar
192
196
mempoolSnapshot
193
197
peeraddr
194
198
numTxIdsToReq
@@ -202,7 +206,7 @@ withPeer channelsVar
202
206
-- ^ received txs
203
207
-> m ()
204
208
handleReceivedTxs txids txs =
205
- collectTxs sharedStateVar peeraddr txids txs
209
+ collectTxs tracer sharedStateVar peeraddr txids txs
206
210
207
211
208
212
decisionLogicThread
@@ -213,20 +217,21 @@ decisionLogicThread
213
217
, Ord peeraddr
214
218
, Ord txid
215
219
)
216
- => TxDecisionPolicy
220
+ => Tracer m (DebugSharedTxState peeraddr txid tx )
221
+ -> TxDecisionPolicy
217
222
-> StrictTVar m (Map peeraddr PeerGSV )
218
223
-> TxChannelsVar m peeraddr txid tx
219
224
-> SharedTxStateVar m peeraddr txid tx
220
225
-> m Void
221
- decisionLogicThread policy gsvVar txChannelsVar sharedStateVar = go
226
+ decisionLogicThread tracer policy gsvVar txChannelsVar sharedStateVar = go
222
227
where
223
228
go :: m Void
224
229
go = do
225
230
-- We rate limit the decision making process, it could overwhelm the CPU
226
231
-- if there are too many inbound connections.
227
232
threadDelay 0.005 -- 5ms
228
233
229
- decisions <- atomically do
234
+ ( decisions, st) <- atomically do
230
235
sharedCtx <-
231
236
SharedDecisionContext
232
237
<$> readTVar gsvVar
@@ -238,7 +243,8 @@ decisionLogicThread policy gsvVar txChannelsVar sharedStateVar = go
238
243
239
244
let (sharedState, decisions) = makeDecisions policy sharedCtx activePeers
240
245
writeTVar sharedStateVar sharedState
241
- return decisions
246
+ return (decisions, sharedState)
247
+ traceWith tracer (DebugSharedTxState st)
242
248
TxChannels { txChannelMap } <- readMVar txChannelsVar
243
249
traverse_
244
250
(\ (mvar, d) -> modifyMVar_ mvar (\ d' -> pure (d' <> d)))
0 commit comments