Skip to content

Commit 96a98bc

Browse files
committed
protofsm: add logging
1 parent 44f0353 commit 96a98bc

File tree

2 files changed

+78
-4
lines changed

2 files changed

+78
-4
lines changed

protofsm/state_machine.go

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import (
88
"github.com/btcsuite/btcd/btcec/v2"
99
"github.com/btcsuite/btcd/chaincfg/chainhash"
1010
"github.com/btcsuite/btcd/wire"
11+
"github.com/davecgh/go-spew/spew"
1112
"github.com/lightningnetwork/lnd/chainntnfs"
1213
"github.com/lightningnetwork/lnd/fn"
14+
"github.com/lightningnetwork/lnd/lnutils"
1315
"github.com/lightningnetwork/lnd/lnwire"
1416
)
1517

@@ -204,6 +206,10 @@ func (s *StateMachine[Event, Env]) Stop() {
204206
//
205207
// TODO(roasbeef): bool if processed?
206208
func (s *StateMachine[Event, Env]) SendEvent(event Event) {
209+
log.Debugf("FSM(%v): sending event: %v", s.cfg.Env.Name(),
210+
lnutils.SpewLogClosure(event),
211+
)
212+
207213
select {
208214
case s.events <- event:
209215
case <-s.quit:
@@ -236,6 +242,10 @@ func (s *StateMachine[Event, Env]) SendMessage(msg lnwire.Message) bool {
236242
return false
237243
}
238244

245+
log.Debugf("FSM(%v): sending msg: %v", s.cfg.Env.Name(),
246+
lnutils.SpewLogClosure(msg),
247+
)
248+
239249
// Otherwise, try to map the message using the default message mapper.
240250
// If we can't extract an event, then we'll return false to indicate
241251
// that the message wasn't processed.
@@ -295,12 +305,20 @@ func (s *StateMachine[Event, Env]) RemoveStateSub(sub StateSubscriber[
295305
// executeDaemonEvent executes a daemon event, which is a special type of event
296306
// that can be emitted as part of the state transition function of the state
297307
// machine. An error is returned if the type of event is unknown.
298-
func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
308+
func (s *StateMachine[Event, Env]) executeDaemonEvent( //nolint:funlen
309+
event DaemonEvent) error {
310+
299311
switch daemonEvent := event.(type) {
300312
// This is a send message event, so we'll send the event, and also mind
301313
// any preconditions as well as post-send events.
302314
case *SendMsgEvent[Event]:
303315
sendAndCleanUp := func() error {
316+
log.Debugf("FSM(%v): sending message to target(%v): "+
317+
"%v", s.cfg.Env.Name(),
318+
daemonEvent.TargetPeer.SerializeCompressed(),
319+
lnutils.SpewLogClosure(daemonEvent.Msgs),
320+
)
321+
304322
err := s.cfg.Daemon.SendMessages(
305323
daemonEvent.TargetPeer, daemonEvent.Msgs,
306324
)
@@ -317,6 +335,12 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
317335
go func() {
318336
defer s.wg.Done()
319337

338+
log.Debugf("FSM(%v): sending "+
339+
"post-send event: %v",
340+
s.cfg.Env.Name(),
341+
lnutils.SpewLogClosure(event),
342+
)
343+
320344
s.SendEvent(event)
321345
}()
322346
})
@@ -340,6 +364,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
340364
predicateTicker := time.NewTicker(pollInterval)
341365
defer predicateTicker.Stop()
342366

367+
log.Infof("FSM(%v): waiting for send predicate to "+
368+
"be true", s.cfg.Env.Name())
369+
343370
for {
344371
select {
345372
case <-predicateTicker.C:
@@ -351,6 +378,10 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
351378
)
352379

353380
if canSend {
381+
log.Infof("FSM(%v): send "+
382+
"active predicate",
383+
s.cfg.Env.Name())
384+
354385
err := sendAndCleanUp()
355386
if err != nil {
356387
//nolint:lll
@@ -371,6 +402,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
371402
// If this is a broadcast transaction event, then we'll broadcast with
372403
// the label attached.
373404
case *BroadcastTxn:
405+
log.Debugf("FSM(%v): broadcasting txn, txid=%v",
406+
s.cfg.Env.Name(), daemonEvent.Tx.TxHash())
407+
374408
err := s.cfg.Daemon.BroadcastTransaction(
375409
daemonEvent.Tx, daemonEvent.Label,
376410
)
@@ -383,6 +417,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
383417
// The state machine has requested a new event to be sent once a
384418
// transaction spending a specified outpoint has confirmed.
385419
case *RegisterSpend[Event]:
420+
log.Debugf("FSM(%v): registering spend: %v", s.cfg.Env.Name(),
421+
daemonEvent.OutPoint)
422+
386423
spendEvent, err := s.cfg.Daemon.RegisterSpendNtfn(
387424
&daemonEvent.OutPoint, daemonEvent.PkScript,
388425
daemonEvent.HeightHint,
@@ -418,6 +455,9 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
418455
// The state machine has requested a new event to be sent once a
419456
// specified txid+pkScript pair has confirmed.
420457
case *RegisterConf[Event]:
458+
log.Debugf("FSM(%v): registering conf: %v", s.cfg.Env.Name(),
459+
daemonEvent.Txid)
460+
421461
numConfs := daemonEvent.NumConfs.UnwrapOr(1)
422462
confEvent, err := s.cfg.Daemon.RegisterConfirmationsNtfn(
423463
&daemonEvent.Txid, daemonEvent.PkScript,
@@ -462,6 +502,12 @@ func (s *StateMachine[Event, Env]) executeDaemonEvent(event DaemonEvent) error {
462502
func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
463503
newEvent Event) (State[Event, Env], error) {
464504

505+
log.Debugf("FSM(%v): applying new event", s.cfg.Env.Name(),
506+
lnutils.NewLogClosure(func() string {
507+
return spew.Sdump(newEvent)
508+
}),
509+
)
510+
465511
eventQueue := fn.NewQueue(newEvent)
466512

467513
// Given the next event to handle, we'll process the event, then add
@@ -472,6 +518,13 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
472518
//nolint:lll
473519
for nextEvent := eventQueue.Dequeue(); nextEvent.IsSome(); nextEvent = eventQueue.Dequeue() {
474520
err := fn.MapOptionZ(nextEvent, func(event Event) error {
521+
log.Debugf("FSM(%v): processing event: %v",
522+
s.cfg.Env.Name(),
523+
lnutils.NewLogClosure(func() string {
524+
return spew.Sdump(event)
525+
}),
526+
)
527+
475528
// Apply the state transition function of the current
476529
// state given this new event and our existing env.
477530
transition, err := currentState.ProcessEvent(
@@ -489,6 +542,10 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
489542
//
490543
//nolint:lll
491544
err := fn.MapOptionZ(events.ExternalEvents, func(dEvents DaemonEventSet) error {
545+
log.Debugf("FSM(%v): processing "+
546+
"daemon %v daemon events",
547+
s.cfg.Env.Name(), len(dEvents))
548+
492549
for _, dEvent := range dEvents {
493550
err := s.executeDaemonEvent(
494551
dEvent,
@@ -508,8 +565,19 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
508565
// our event queue.
509566
//
510567
//nolint:lll
511-
events.InternalEvent.WhenSome(func(inEvent Event) {
512-
eventQueue.Enqueue(inEvent)
568+
events.InternalEvent.WhenSome(func(es Event) {
569+
log.Debugf("FSM(%v): adding "+
570+
"new internal event "+
571+
"to queue: %v",
572+
s.cfg.Env.Name(),
573+
lnutils.NewLogClosure(func() string { //nolint:lll
574+
return spew.Sdump( //nolint:lll
575+
es,
576+
)
577+
}),
578+
)
579+
580+
eventQueue.Enqueue(es)
513581
})
514582

515583
return nil
@@ -544,6 +612,8 @@ func (s *StateMachine[Event, Env]) applyEvents(currentState State[Event, Env],
544612
func (s *StateMachine[Event, Env]) driveMachine() {
545613
defer s.wg.Done()
546614

615+
log.Debugf("FSM(%v): starting state machine", s.cfg.Env.Name())
616+
547617
currentState := s.cfg.InitialState
548618

549619
// Before we start, if we have an init daemon event specified, then

protofsm/state_machine_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ func (d *dummyStateStart) ProcessEvent(event dummyEvents, env *dummyEnv,
113113
},
114114
NewEvents: fn.Some(EmittedEvent[dummyEvents]{
115115
ExternalEvents: fn.Some(DaemonEventSet{
116-
sendEvent, &BroadcastTxn{}, sendEvent2,
116+
sendEvent, sendEvent2,
117+
&BroadcastTxn{
118+
Tx: &wire.MsgTx{},
119+
Label: "test",
120+
},
117121
}),
118122
}),
119123
}, nil

0 commit comments

Comments
 (0)