From 3f6315242a7ceb160c12f6997f5c020362424877 Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Fri, 24 Feb 2023 01:25:53 +0800 Subject: [PATCH] funding: fix itest flake with pending channels --- funding/manager.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/funding/manager.go b/funding/manager.go index 0f65e920e..2d702ba48 100644 --- a/funding/manager.go +++ b/funding/manager.go @@ -108,6 +108,11 @@ const ( // for the funding transaction to be confirmed before forgetting // channels that aren't initiated by us. 2016 blocks is ~2 weeks. maxWaitNumBlocksFundingConf = 2016 + + // pendingChansLimit is the maximum number of pending channels that we + // can have. After this point, pending channel opens will start to be + // rejected. + pendingChansLimit = 1_000 ) var ( @@ -1320,6 +1325,25 @@ func (f *Manager) handleFundingOpen(peer lnpeer.Peer, return } + // Ensure that the pendingChansLimit is respected. + pendingChans, err := f.cfg.Wallet.Cfg.Database.FetchPendingChannels() + if err != nil { + f.failFundingFlow( + peer, msg.PendingChannelID, err, + ) + + return + } + + if len(pendingChans) > pendingChansLimit { + f.failFundingFlow( + peer, msg.PendingChannelID, + lnwire.ErrMaxPendingChannels, + ) + + return + } + // We'll also reject any requests to create channels until we're fully // synced to the network as we won't be able to properly validate the // confirmation of the funding transaction.