mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-11-10 06:07:16 +01:00
channeldb+discovery: fetch timestamps from DB if required
This commit is contained in:
@@ -229,7 +229,7 @@ func (c *ChanSeries) FilterKnownChanIDs(chain chainhash.Hash,
|
||||
func (c *ChanSeries) FilterChannelRange(chain chainhash.Hash,
|
||||
startHeight, endHeight uint32) ([]channeldb.BlockChannelRange, error) {
|
||||
|
||||
return c.graph.FilterChannelRange(startHeight, endHeight)
|
||||
return c.graph.FilterChannelRange(startHeight, endHeight, false)
|
||||
}
|
||||
|
||||
// FetchChanAnns returns a full set of channel announcements as well as their
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/lnpeer"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"golang.org/x/time/rate"
|
||||
@@ -1044,7 +1045,7 @@ func (g *GossipSyncer) replyChanRangeQuery(query *lnwire.QueryChannelRange) erro
|
||||
// this as there's a transport message size limit which we'll need to
|
||||
// adhere to. We also need to make sure all of our replies cover the
|
||||
// expected range of the query.
|
||||
sendReplyForChunk := func(channelChunk []lnwire.ShortChannelID,
|
||||
sendReplyForChunk := func(channelChunk []channeldb.ChannelUpdateInfo,
|
||||
firstHeight, lastHeight uint32, finalChunk bool) error {
|
||||
|
||||
// The number of blocks contained in the current chunk (the
|
||||
@@ -1057,20 +1058,25 @@ func (g *GossipSyncer) replyChanRangeQuery(query *lnwire.QueryChannelRange) erro
|
||||
complete = 1
|
||||
}
|
||||
|
||||
scids := make([]lnwire.ShortChannelID, len(channelChunk))
|
||||
for i, info := range channelChunk {
|
||||
scids[i] = info.ShortChannelID
|
||||
}
|
||||
|
||||
return g.cfg.sendToPeerSync(&lnwire.ReplyChannelRange{
|
||||
ChainHash: query.ChainHash,
|
||||
NumBlocks: numBlocks,
|
||||
FirstBlockHeight: firstHeight,
|
||||
Complete: complete,
|
||||
EncodingType: g.cfg.encodingType,
|
||||
ShortChanIDs: channelChunk,
|
||||
ShortChanIDs: scids,
|
||||
})
|
||||
}
|
||||
|
||||
var (
|
||||
firstHeight = query.FirstBlockHeight
|
||||
lastHeight uint32
|
||||
channelChunk []lnwire.ShortChannelID
|
||||
channelChunk []channeldb.ChannelUpdateInfo
|
||||
)
|
||||
for _, channelRange := range channelRanges {
|
||||
channels := channelRange.Channels
|
||||
@@ -1118,8 +1124,10 @@ func (g *GossipSyncer) replyChanRangeQuery(query *lnwire.QueryChannelRange) erro
|
||||
// Sort the chunk once again if we had to shuffle it.
|
||||
if exceedsChunkSize {
|
||||
sort.Slice(channelChunk, func(i, j int) bool {
|
||||
return channelChunk[i].ToUint64() <
|
||||
channelChunk[j].ToUint64()
|
||||
id1 := channelChunk[i].ShortChannelID.ToUint64()
|
||||
id2 := channelChunk[j].ShortChannelID.ToUint64()
|
||||
|
||||
return id1 < id2
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,10 +103,13 @@ func (m *mockChannelGraphTimeSeries) FilterChannelRange(chain chainhash.Hash,
|
||||
m.filterRangeReqs <- filterRangeReq{startHeight, endHeight}
|
||||
reply := <-m.filterRangeResp
|
||||
|
||||
channelsPerBlock := make(map[uint32][]lnwire.ShortChannelID)
|
||||
channelsPerBlock := make(map[uint32][]channeldb.ChannelUpdateInfo)
|
||||
for _, cid := range reply {
|
||||
channelsPerBlock[cid.BlockHeight] = append(
|
||||
channelsPerBlock[cid.BlockHeight], cid,
|
||||
channelsPerBlock[cid.BlockHeight],
|
||||
channeldb.ChannelUpdateInfo{
|
||||
ShortChannelID: cid,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -119,16 +122,21 @@ func (m *mockChannelGraphTimeSeries) FilterChannelRange(chain chainhash.Hash,
|
||||
return blocks[i] < blocks[j]
|
||||
})
|
||||
|
||||
channelRanges := make([]channeldb.BlockChannelRange, 0, len(channelsPerBlock))
|
||||
channelRanges := make(
|
||||
[]channeldb.BlockChannelRange, 0, len(channelsPerBlock),
|
||||
)
|
||||
for _, block := range blocks {
|
||||
channelRanges = append(channelRanges, channeldb.BlockChannelRange{
|
||||
Height: block,
|
||||
Channels: channelsPerBlock[block],
|
||||
})
|
||||
channelRanges = append(
|
||||
channelRanges, channeldb.BlockChannelRange{
|
||||
Height: block,
|
||||
Channels: channelsPerBlock[block],
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
return channelRanges, nil
|
||||
}
|
||||
|
||||
func (m *mockChannelGraphTimeSeries) FetchChanAnns(chain chainhash.Hash,
|
||||
shortChanIDs []lnwire.ShortChannelID) ([]lnwire.Message, error) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user