mirror of
https://github.com/aljazceru/breez-lnd.git
synced 2026-02-23 15:34:22 +01:00
htlcswitch/link: restrict EligibleToForward to wait for reestablish
This commit modifies the link's EligibleToForward() method only return true once the peers have successfully exchanged channel reestablish messages. This is a preliminary step to increasing the reestablish timeout, ensuring the switch won't try to forward over links while we're waiting for the remote peer to resume the connection.
This commit is contained in:
@@ -29,6 +29,7 @@ import (
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
"github.com/lightningnetwork/lnd/keychain"
|
||||
"github.com/lightningnetwork/lnd/lnpeer"
|
||||
"github.com/lightningnetwork/lnd/lntest/wait"
|
||||
"github.com/lightningnetwork/lnd/lntypes"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
@@ -837,7 +838,12 @@ func (n *threeHopNetwork) start() error {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return waitLinksEligible(map[string]*channelLink{
|
||||
"alice": n.aliceChannelLink,
|
||||
"bob first": n.firstBobChannelLink,
|
||||
"bob second": n.secondBobChannelLink,
|
||||
"carol": n.carolChannelLink,
|
||||
})
|
||||
}
|
||||
|
||||
// stop stops nodes and cleanup its databases.
|
||||
@@ -1130,6 +1136,7 @@ func (h *hopNetwork) createChannelLink(server, peer *mockServer,
|
||||
if err := server.htlcSwitch.AddLink(link); err != nil {
|
||||
return nil, fmt.Errorf("unable to add channel link: %v", err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
@@ -1230,7 +1237,10 @@ func (n *twoHopNetwork) start() error {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return waitLinksEligible(map[string]*channelLink{
|
||||
"alice": n.aliceChannelLink,
|
||||
"bob": n.bobChannelLink,
|
||||
})
|
||||
}
|
||||
|
||||
// stop stops nodes and cleanup its databases.
|
||||
@@ -1320,12 +1330,26 @@ func (n *twoHopNetwork) makeHoldPayment(sendingPeer, receivingPeer lnpeer.Peer,
|
||||
return paymentErr
|
||||
}
|
||||
|
||||
// waitLinksEligible blocks until all links the provided name-to-link map are
|
||||
// eligible to forward HTLCs.
|
||||
func waitLinksEligible(links map[string]*channelLink) error {
|
||||
return wait.NoError(func() error {
|
||||
for name, link := range links {
|
||||
if link.EligibleToForward() {
|
||||
continue
|
||||
}
|
||||
return fmt.Errorf("%s channel link not eligible", name)
|
||||
}
|
||||
return nil
|
||||
}, 3*time.Second)
|
||||
}
|
||||
|
||||
// timeout implements a test level timeout.
|
||||
func timeout(t *testing.T) func() {
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
select {
|
||||
case <-time.After(5 * time.Second):
|
||||
case <-time.After(10 * time.Second):
|
||||
pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
||||
|
||||
panic("test timeout")
|
||||
|
||||
Reference in New Issue
Block a user