Merge pull request #4010 from halseth/avoid-resend-chansync-loop
peer: avoid chansync resend loop
This commit is contained in:
commit
5484436520
17
peer.go
17
peer.go
@ -210,6 +210,12 @@ type peer struct {
|
|||||||
// the connection handshake.
|
// the connection handshake.
|
||||||
remoteFeatures *lnwire.FeatureVector
|
remoteFeatures *lnwire.FeatureVector
|
||||||
|
|
||||||
|
// resentChanSyncMsg is a set that keeps track of which channels we
|
||||||
|
// have re-sent channel reestablishment messages for. This is done to
|
||||||
|
// avoid getting into loop where both peers will respond to the other
|
||||||
|
// peer's chansync message with its own over and over again.
|
||||||
|
resentChanSyncMsg map[lnwire.ChannelID]struct{}
|
||||||
|
|
||||||
// writePool is the task pool to that manages reuse of write buffers.
|
// writePool is the task pool to that manages reuse of write buffers.
|
||||||
// Write tasks are submitted to the pool in order to conserve the total
|
// Write tasks are submitted to the pool in order to conserve the total
|
||||||
// number of write buffers allocated at any one time, and decouple write
|
// number of write buffers allocated at any one time, and decouple write
|
||||||
@ -266,6 +272,7 @@ func newPeer(conn net.Conn, connReq *connmgr.ConnReq, server *server,
|
|||||||
localCloseChanReqs: make(chan *htlcswitch.ChanClose),
|
localCloseChanReqs: make(chan *htlcswitch.ChanClose),
|
||||||
linkFailures: make(chan linkFailureReport),
|
linkFailures: make(chan linkFailureReport),
|
||||||
chanCloseMsgs: make(chan *closeMsg),
|
chanCloseMsgs: make(chan *closeMsg),
|
||||||
|
resentChanSyncMsg: make(map[lnwire.ChannelID]struct{}),
|
||||||
|
|
||||||
chanActiveTimeout: chanActiveTimeout,
|
chanActiveTimeout: chanActiveTimeout,
|
||||||
|
|
||||||
@ -2506,6 +2513,12 @@ func (p *peer) sendInitMsg() error {
|
|||||||
// resendChanSyncMsg will attempt to find a channel sync message for the closed
|
// resendChanSyncMsg will attempt to find a channel sync message for the closed
|
||||||
// channel and resend it to our peer.
|
// channel and resend it to our peer.
|
||||||
func (p *peer) resendChanSyncMsg(cid lnwire.ChannelID) error {
|
func (p *peer) resendChanSyncMsg(cid lnwire.ChannelID) error {
|
||||||
|
// If we already re-sent the mssage for this channel, we won't do it
|
||||||
|
// again.
|
||||||
|
if _, ok := p.resentChanSyncMsg[cid]; ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Check if we have any channel sync messages stored for this channel.
|
// Check if we have any channel sync messages stored for this channel.
|
||||||
c, err := p.server.chanDB.FetchClosedChannelForID(cid)
|
c, err := p.server.chanDB.FetchClosedChannelForID(cid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2534,6 +2547,10 @@ func (p *peer) resendChanSyncMsg(cid lnwire.ChannelID) error {
|
|||||||
peerLog.Debugf("Re-sent channel sync message for channel %v to peer "+
|
peerLog.Debugf("Re-sent channel sync message for channel %v to peer "+
|
||||||
"%v", cid, p)
|
"%v", cid, p)
|
||||||
|
|
||||||
|
// Note down that we sent the message, so we won't resend it again for
|
||||||
|
// this connection.
|
||||||
|
p.resentChanSyncMsg[cid] = struct{}{}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user