Merge pull request #8857 from MPins/issue-8793

Fixing the current state update when lncli debuglevel and lncli setmccfg are called
This commit is contained in:
Oliver Gugger 2024-08-15 02:33:54 -06:00 committed by GitHub
commit 0aced5ce2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 60 additions and 5 deletions

View file

@ -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
@ -53,4 +57,5 @@
# Contributors (Alphabetical Order)
* Pins
* Ziggie

View file

@ -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"
@ -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,
@ -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
@ -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 {
@ -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
}

View file

@ -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
}

View file

@ -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,
@ -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.