routing/router: sets bestHeight before filtering chain
This commit alters the behavior of the router's logic on startup, ensuring that the chain view is filtered using the router's latest prune height. Before, the chain was filtered using the bestHeight variable, which was uninitialized, benignly forcing a rescan from genesis. In tracking down this, we realized that we should actually be using the prune height, as this is representative of the channel view loaded from disk. The best height/hash are now only used during startup to determine if we are out of sync.
This commit is contained in:
parent
010815e280
commit
153794adb0
@ -273,6 +273,18 @@ func (r *ChannelRouter) Start() error {
|
|||||||
r.newBlocks = r.cfg.ChainView.FilteredBlocks()
|
r.newBlocks = r.cfg.ChainView.FilteredBlocks()
|
||||||
r.staleBlocks = r.cfg.ChainView.DisconnectedBlocks()
|
r.staleBlocks = r.cfg.ChainView.DisconnectedBlocks()
|
||||||
|
|
||||||
|
_, pruneHeight, err := r.cfg.Graph.PruneTip()
|
||||||
|
if err != nil {
|
||||||
|
switch {
|
||||||
|
// If the graph has never been pruned, or hasn't fully been
|
||||||
|
// created yet, then we don't treat this as an explicit error.
|
||||||
|
case err == channeldb.ErrGraphNeverPruned:
|
||||||
|
case err == channeldb.ErrGraphNotFound:
|
||||||
|
default:
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Before we perform our manual block pruning, we'll construct and
|
// Before we perform our manual block pruning, we'll construct and
|
||||||
// apply a fresh chain filter to the active FilteredChainView instance.
|
// apply a fresh chain filter to the active FilteredChainView instance.
|
||||||
// We do this before, as otherwise we may miss on-chain events as the
|
// We do this before, as otherwise we may miss on-chain events as the
|
||||||
@ -281,8 +293,9 @@ func (r *ChannelRouter) Start() error {
|
|||||||
if err != nil && err != channeldb.ErrGraphNoEdgesFound {
|
if err != nil && err != channeldb.ErrGraphNoEdgesFound {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("Filtering chain using %v channels active", len(channelView))
|
log.Infof("Filtering chain using %v channels active", len(channelView))
|
||||||
err = r.cfg.ChainView.UpdateFilter(channelView, r.bestHeight)
|
err = r.cfg.ChainView.UpdateFilter(channelView, pruneHeight)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -331,6 +344,7 @@ func (r *ChannelRouter) syncGraphWithChain() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r.bestHeight = uint32(bestHeight)
|
r.bestHeight = uint32(bestHeight)
|
||||||
|
|
||||||
pruneHash, pruneHeight, err := r.cfg.Graph.PruneTip()
|
pruneHash, pruneHeight, err := r.cfg.Graph.PruneTip()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
switch {
|
switch {
|
||||||
|
Loading…
Reference in New Issue
Block a user