Skip to content

Commit

Permalink
Merge pull request #8857 from MPins/issue-8793
Browse files Browse the repository at this point in the history
Fixing the current state update when lncli debuglevel and lncli setmccfg are called
  • Loading branch information
guggero committed Aug 15, 2024
2 parents 77c7f77 + 4dda2e2 commit 0aced5c
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 5 deletions.
5 changes: 5 additions & 0 deletions docs/release-notes/release-notes-0.19.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@

# Bug Fixes

* [Fixed a bug](https://github.com/lightningnetwork/lnd/pull/8857) to correctly
propagate mission control and debug level config values to the main LND config
struct so that the GetDebugInfo response is accurate.

# New Features
## Functional Enhancements
## RPC Additions
Expand Down Expand Up @@ -53,4 +57,5 @@

# Contributors (Alphabetical Order)

* Pins
* Ziggie
27 changes: 22 additions & 5 deletions routing/missioncontrol.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/btcsuite/btcd/btcutil"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/fn"
"github.com/lightningnetwork/lnd/kvdb"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/routing/route"
Expand Down Expand Up @@ -110,6 +111,10 @@ type MissionControl struct {
// results that mission control collects.
estimator Estimator

// onConfigUpdate is a function that is called whenever the
// mission control state is updated.
onConfigUpdate fn.Option[func(cfg *MissionControlConfig)]

sync.Mutex

// TODO(roasbeef): further counters, if vertex continually unavailable,
Expand All @@ -124,6 +129,10 @@ type MissionControlConfig struct {
// Estimator gives probability estimates for node pairs.
Estimator Estimator

// OnConfigUpdate is function that is called whenever the
// mission control state is updated.
OnConfigUpdate fn.Option[func(cfg *MissionControlConfig)]

// MaxMcHistory defines the maximum number of payment results that are
// held on disk.
MaxMcHistory int
Expand Down Expand Up @@ -224,11 +233,14 @@ func NewMissionControl(db kvdb.Backend, self route.Vertex,
}

mc := &MissionControl{
state: newMissionControlState(cfg.MinFailureRelaxInterval),
now: time.Now,
selfNode: self,
store: store,
estimator: cfg.Estimator,
state: newMissionControlState(
cfg.MinFailureRelaxInterval,
),
now: time.Now,
selfNode: self,
store: store,
estimator: cfg.Estimator,
onConfigUpdate: cfg.OnConfigUpdate,
}

if err := mc.init(); err != nil {
Expand Down Expand Up @@ -308,6 +320,11 @@ func (m *MissionControl) SetConfig(cfg *MissionControlConfig) error {
m.state.minFailureRelaxInterval = cfg.MinFailureRelaxInterval
m.estimator = cfg.Estimator

// Execute the callback function if it is set.
m.onConfigUpdate.WhenSome(func(f func(cfg *MissionControlConfig)) {
f(cfg)
})

return nil
}

Expand Down
3 changes: 3 additions & 0 deletions rpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -7061,6 +7061,9 @@ func (r *rpcServer) DebugLevel(ctx context.Context,
return nil, err
}

// Propagate the new config level to the main config struct.
r.cfg.DebugLevel = req.LevelSpec

return &lnrpc.DebugLevelResponse{}, nil
}

Expand Down
30 changes: 30 additions & 0 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -928,6 +928,7 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
}

mcCfg := &routing.MissionControlConfig{
OnConfigUpdate: fn.Some(s.UpdateRoutingConfig),
Estimator: estimator,
MaxMcHistory: routingConfig.MaxMcHistory,
McFlushInterval: routingConfig.McFlushInterval,
Expand Down Expand Up @@ -1699,6 +1700,35 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
return s, nil
}

// UpdateRoutingConfig is a callback function to update the routing config
// values in the main cfg.
func (s *server) UpdateRoutingConfig(cfg *routing.MissionControlConfig) {
routerCfg := s.cfg.SubRPCServers.RouterRPC

switch c := cfg.Estimator.Config().(type) {
case routing.AprioriConfig:
routerCfg.ProbabilityEstimatorType =
routing.AprioriEstimatorName

targetCfg := routerCfg.AprioriConfig
targetCfg.PenaltyHalfLife = c.PenaltyHalfLife
targetCfg.Weight = c.AprioriWeight
targetCfg.CapacityFraction = c.CapacityFraction
targetCfg.HopProbability = c.AprioriHopProbability

case routing.BimodalConfig:
routerCfg.ProbabilityEstimatorType =
routing.BimodalEstimatorName

targetCfg := routerCfg.BimodalConfig
targetCfg.Scale = int64(c.BimodalScaleMsat)
targetCfg.NodeWeight = c.BimodalNodeWeight
targetCfg.DecayTime = c.BimodalDecayTime
}

routerCfg.MaxMcHistory = cfg.MaxMcHistory
}

// signAliasUpdate takes a ChannelUpdate and returns the signature. This is
// used for option_scid_alias channels where the ChannelUpdate to be sent back
// may differ from what is on disk.
Expand Down

0 comments on commit 0aced5c

Please sign in to comment.