routing: add strict pruning as new flag, default for neutrino

In this commit we add a new flag that controls if lnd will do strict
zombie pruning or not. If true, then this will cause lnd to maintain a
tighter graph as it wants both edges to always be live. We enable this by
default for neutrino as without this, it's possible that a node never
sees both edges begin disabled, so those edges are never actually pruned
from the graph.
This commit is contained in:
Olaoluwa Osuntokun 2021-04-02 15:02:08 -07:00
parent 7b589e5811
commit 6c27de7d11
No known key found for this signature in database
GPG Key ID: 3BBD59E99B280306
3 changed files with 12 additions and 1 deletions

@ -2,5 +2,7 @@ package lncfg
// Routing holds the configuration options for routing. // Routing holds the configuration options for routing.
type Routing struct { type Routing struct {
AssumeChannelValid bool `long:"assumechanvalid" description:"DEPRECATED: This is now turned on by default for Neutrino (use neutrino.validatechannels=true to turn off) and shouldn't be used for any other backend! (default: false)"` AssumeChannelValid bool `long:"assumechanvalid" description:"Skip checking channel spentness during graph validation. This speedup comes at the risk of using an unvalidated view of the network for routing. (default: false)"`
StrictZombiePruning bool `long:"strictgraphpruning" description:"If true, then the graph will be pruned more aggressively for zombies. In practice this means that edges with a single stale edge will be considered a zombie."`
} }

@ -489,6 +489,12 @@ bitcoin.node=btcd
; other backend! ; other backend!
; --routing.assumechanvalid=true ; --routing.assumechanvalid=true
; If set to true, then we'll prune a channel if only a single edge is seen as
; being stale. This results in a more compact channel graph, and also is helpful
; for neutrino nodes as it means they'll only maintain edges where both nodes are
; seen as being live from it's PoV.
; --routing.strictgraphpruning=true
[Btcd] [Btcd]
; The base directory that contains the node's data, logs, configuration file, ; The base directory that contains the node's data, logs, configuration file,

@ -768,6 +768,8 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
s.controlTower = routing.NewControlTower(paymentControl) s.controlTower = routing.NewControlTower(paymentControl)
strictPruning := (cfg.Bitcoin.Node == "neutrino" ||
cfg.Routing.StrictZombiePruning)
s.chanRouter, err = routing.New(routing.Config{ s.chanRouter, err = routing.New(routing.Config{
Graph: chanGraph, Graph: chanGraph,
Chain: cc.ChainIO, Chain: cc.ChainIO,
@ -784,6 +786,7 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
NextPaymentID: sequencer.NextID, NextPaymentID: sequencer.NextID,
PathFindingConfig: pathFindingConfig, PathFindingConfig: pathFindingConfig,
Clock: clock.NewDefaultClock(), Clock: clock.NewDefaultClock(),
StrictZombiePruning: strictPruning,
}) })
if err != nil { if err != nil {
return nil, fmt.Errorf("can't create router: %v", err) return nil, fmt.Errorf("can't create router: %v", err)