Skip to content

Commit a7d7371

Browse files
committed
multi: use utils.RegisterBlockEpochNtfnWithRetry
This is needed after LND release v0.20.0-beta.rc3, which delays the chain notifier until after headers finish syncing (commit c6f458e478), so when Loop boots every static-address manager calls RegisterBlockEpochNtfn immediately, sees "chain notifier RPC is still in the process of starting", treats it as fatal, and Loop shuts down; LND v0.20.0-beta.rc2 didn't have the delay.
1 parent c78dd2f commit a7d7371

File tree

9 files changed

+29
-17
lines changed

9 files changed

+29
-17
lines changed

instantout/manager.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/lightninglabs/loop/fsm"
1212
"github.com/lightninglabs/loop/instantout/reservation"
1313
"github.com/lightninglabs/loop/swapserverrpc"
14+
"github.com/lightninglabs/loop/utils"
1415
"github.com/lightningnetwork/lnd/lntypes"
1516
)
1617

@@ -68,8 +69,8 @@ func (m *Manager) Run(ctx context.Context, initChan chan struct{}) error {
6869
return err
6970
}
7071

71-
newBlockChan, newBlockErrChan, err := m.cfg.ChainNotifier.
72-
RegisterBlockEpochNtfn(ctx)
72+
newBlockChan, newBlockErrChan, err :=
73+
utils.RegisterBlockEpochNtfnWithRetry(ctx, m.cfg.ChainNotifier)
7374
if err != nil {
7475
close(initChan)
7576
return err

instantout/reservation/actions.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/btcsuite/btcd/btcutil"
88
"github.com/lightninglabs/loop/fsm"
99
"github.com/lightninglabs/loop/swapserverrpc"
10+
"github.com/lightninglabs/loop/utils"
1011
"github.com/lightningnetwork/lnd/chainntnfs"
1112
)
1213

@@ -103,8 +104,8 @@ func (f *FSM) SubscribeToConfirmationAction(ctx context.Context,
103104
return f.HandleError(err)
104105
}
105106

106-
blockChan, errBlockChan, err := f.cfg.ChainNotifier.RegisterBlockEpochNtfn(
107-
callCtx,
107+
blockChan, errBlockChan, err := utils.RegisterBlockEpochNtfnWithRetry(
108+
callCtx, f.cfg.ChainNotifier,
108109
)
109110
if err != nil {
110111
f.Errorf("unable to subscribe to block notifications: %v", err)
@@ -158,8 +159,9 @@ func (f *FSM) AsyncWaitForExpiredOrSweptAction(ctx context.Context,
158159

159160
notifCtx, cancel := context.WithCancel(ctx)
160161

161-
blockHeightChan, errEpochChan, err := f.cfg.ChainNotifier.
162-
RegisterBlockEpochNtfn(notifCtx)
162+
blockHeightChan, errEpochChan, err := utils.RegisterBlockEpochNtfnWithRetry(
163+
notifCtx, f.cfg.ChainNotifier,
164+
)
163165
if err != nil {
164166
cancel()
165167
return f.HandleError(err)

instantout/reservation/manager.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/btcsuite/btcd/btcutil"
1212
"github.com/lightninglabs/loop/fsm"
1313
reservationrpc "github.com/lightninglabs/loop/swapserverrpc"
14+
"github.com/lightninglabs/loop/utils"
1415
)
1516

1617
// Manager manages the reservation state machines.
@@ -49,8 +50,8 @@ func (m *Manager) Run(ctx context.Context, height int32,
4950
return err
5051
}
5152

52-
newBlockChan, newBlockErrChan, err := m.cfg.ChainNotifier.
53-
RegisterBlockEpochNtfn(runCtx)
53+
newBlockChan, newBlockErrChan, err :=
54+
utils.RegisterBlockEpochNtfnWithRetry(runCtx, m.cfg.ChainNotifier)
5455
if err != nil {
5556
return err
5657
}

staticaddr/address/manager.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/lightninglabs/loop/staticaddr/version"
1717
"github.com/lightninglabs/loop/swap"
1818
staticaddressrpc "github.com/lightninglabs/loop/swapserverrpc"
19+
"github.com/lightninglabs/loop/utils"
1920
"github.com/lightningnetwork/lnd/input"
2021
"github.com/lightningnetwork/lnd/keychain"
2122
"github.com/lightningnetwork/lnd/lnwallet"
@@ -69,7 +70,7 @@ func NewManager(cfg *ManagerConfig, currentHeight int32) *Manager {
6970
// Run runs the address manager.
7071
func (m *Manager) Run(ctx context.Context, initChan chan struct{}) error {
7172
newBlockChan, newBlockErrChan, err :=
72-
m.cfg.ChainNotifier.RegisterBlockEpochNtfn(ctx)
73+
utils.RegisterBlockEpochNtfnWithRetry(ctx, m.cfg.ChainNotifier)
7374

7475
if err != nil {
7576
return err

staticaddr/deposit/manager.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/lightninglabs/loop"
1616
"github.com/lightninglabs/loop/fsm"
1717
staticaddressrpc "github.com/lightninglabs/loop/swapserverrpc"
18+
"github.com/lightninglabs/loop/utils"
1819
"github.com/lightningnetwork/lnd/lnrpc/walletrpc"
1920
"github.com/lightningnetwork/lnd/lnwallet"
2021
)
@@ -101,7 +102,8 @@ func NewManager(cfg *ManagerConfig) *Manager {
101102

102103
// Run runs the address manager.
103104
func (m *Manager) Run(ctx context.Context, initChan chan struct{}) error {
104-
newBlockChan, newBlockErrChan, err := m.cfg.ChainNotifier.RegisterBlockEpochNtfn(ctx) //nolint:lll
105+
newBlockChan, newBlockErrChan, err :=
106+
utils.RegisterBlockEpochNtfnWithRetry(ctx, m.cfg.ChainNotifier)
105107
if err != nil {
106108
log.Errorf("unable to register block epoch notifier: %v", err)
107109

staticaddr/loopin/actions.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/lightninglabs/loop/staticaddr/version"
2121
"github.com/lightninglabs/loop/swap"
2222
"github.com/lightninglabs/loop/swapserverrpc"
23+
"github.com/lightninglabs/loop/utils"
2324
"github.com/lightningnetwork/lnd/chainntnfs"
2425
"github.com/lightningnetwork/lnd/input"
2526
"github.com/lightningnetwork/lnd/invoices"
@@ -497,8 +498,9 @@ func (f *FSM) MonitorInvoiceAndHtlcTxAction(ctx context.Context,
497498
}
498499

499500
// Subscribe to new blocks.
500-
registerBlocks := f.cfg.ChainNotifier.RegisterBlockEpochNtfn
501-
blockChan, blockChanErr, err := registerBlocks(ctx)
501+
blockChan, blockChanErr, err := utils.RegisterBlockEpochNtfnWithRetry(
502+
ctx, f.cfg.ChainNotifier,
503+
)
502504
if err != nil {
503505
err = fmt.Errorf("unable to subscribe to new blocks: %w", err)
504506

staticaddr/loopin/manager.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/lightninglabs/loop/staticaddr/address"
2323
"github.com/lightninglabs/loop/staticaddr/deposit"
2424
"github.com/lightninglabs/loop/swapserverrpc"
25+
"github.com/lightninglabs/loop/utils"
2526
"github.com/lightningnetwork/lnd/input"
2627
"github.com/lightningnetwork/lnd/lntypes"
2728
"github.com/lightningnetwork/lnd/lnwallet"
@@ -158,8 +159,8 @@ func NewManager(cfg *Config, currentHeight uint32) *Manager {
158159

159160
// Run runs the static address loop-in manager.
160161
func (m *Manager) Run(ctx context.Context, initChan chan struct{}) error {
161-
registerBlockNtfn := m.cfg.ChainNotifier.RegisterBlockEpochNtfn
162-
newBlockChan, newBlockErrChan, err := registerBlockNtfn(ctx)
162+
newBlockChan, newBlockErrChan, err :=
163+
utils.RegisterBlockEpochNtfnWithRetry(ctx, m.cfg.ChainNotifier)
163164
if err != nil {
164165
log.Errorf("unable to register for block notifications: %v",
165166
err)

staticaddr/withdraw/manager.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/lightninglabs/lndclient"
2121
"github.com/lightninglabs/loop/staticaddr/deposit"
2222
staticaddressrpc "github.com/lightninglabs/loop/swapserverrpc"
23+
"github.com/lightninglabs/loop/utils"
2324
"github.com/lightningnetwork/lnd/chainntnfs"
2425
"github.com/lightningnetwork/lnd/input"
2526
"github.com/lightningnetwork/lnd/lnrpc/walletrpc"
@@ -154,7 +155,7 @@ func NewManager(cfg *ManagerConfig, currentHeight uint32) *Manager {
154155
// Run runs the deposit withdrawal manager.
155156
func (m *Manager) Run(ctx context.Context, initChan chan struct{}) error {
156157
newBlockChan, newBlockErrChan, err :=
157-
m.cfg.ChainNotifier.RegisterBlockEpochNtfn(ctx)
158+
utils.RegisterBlockEpochNtfnWithRetry(ctx, m.cfg.ChainNotifier)
158159

159160
if err != nil {
160161
log.Errorf("unable to register for block epoch "+

sweepbatcher/sweep_batch.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -842,8 +842,9 @@ func (b *batch) Run(ctx context.Context) error {
842842
clock := b.cfg.clock
843843
startTime := clock.Now()
844844

845-
blockChan, blockErrChan, err :=
846-
b.chainNotifier.RegisterBlockEpochNtfn(runCtx)
845+
blockChan, blockErrChan, err := utils.RegisterBlockEpochNtfnWithRetry(
846+
runCtx, b.chainNotifier,
847+
)
847848
if err != nil {
848849
return fmt.Errorf("block registration error: %w", err)
849850
}

0 commit comments

Comments
 (0)