mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-29 15:11:09 +02:00
discovery: fix state transition in GossipSyncer
Previously, we would set the state of the syncer after sending the msg, which has the following flow, 1. In state `queryNewChannels`, we send the msg `QueryShortChanIDs`. 2. Once the msg is sent, we change to state `waitingQueryChanReply`. But there's no guarantee the remote won't reply back inbetween the two step. When that happens, our syncer would still be in state `queryNewChannels`, causing the following error, ``` [ERR] DISC gossiper.go:873: Process query msg from peer [Alice] got unexpected msg *lnwire.ReplyShortChanIDsEnd received in state queryNewChannels ``` To fix it, we now make sure the state is updated before sending the msg.
This commit is contained in:
@@ -1478,10 +1478,7 @@ func TestGossipSyncerSynchronizeChanIDs(t *testing.T) {
|
||||
|
||||
for i := 0; i < chunkSize*2; i += 2 {
|
||||
// With our set up complete, we'll request a sync of chan ID's.
|
||||
done, err := syncer.synchronizeChanIDs()
|
||||
if err != nil {
|
||||
t.Fatalf("unable to sync chan IDs: %v", err)
|
||||
}
|
||||
done := syncer.synchronizeChanIDs()
|
||||
|
||||
// At this point, we shouldn't yet be done as only 2 items
|
||||
// should have been queried for.
|
||||
@@ -1528,8 +1525,7 @@ func TestGossipSyncerSynchronizeChanIDs(t *testing.T) {
|
||||
}
|
||||
|
||||
// If we issue another query, the syncer should tell us that it's done.
|
||||
done, err := syncer.synchronizeChanIDs()
|
||||
require.NoError(t, err, "unable to sync chan IDs")
|
||||
done := syncer.synchronizeChanIDs()
|
||||
if done {
|
||||
t.Fatalf("syncer should be finished!")
|
||||
}
|
||||
|
Reference in New Issue
Block a user