autopilot+autopilotrpc: ignore local channels if ignore_local_state set

This commit is contained in:
Johan T. Halseth 2019-03-18 14:41:45 +01:00
parent c7ab6f3603
commit d4813422c9
No known key found for this signature in database
GPG Key ID: 15BAADA29DA20D26
2 changed files with 30 additions and 19 deletions

@ -270,7 +270,9 @@ func (m *Manager) StopAgent() error {
} }
// QueryHeuristics queries the available autopilot heuristics for node scores. // QueryHeuristics queries the available autopilot heuristics for node scores.
func (m *Manager) QueryHeuristics(nodes []NodeID) (HeuristicScores, error) { func (m *Manager) QueryHeuristics(nodes []NodeID, localState bool) (
HeuristicScores, error) {
m.Lock() m.Lock()
defer m.Unlock() defer m.Unlock()
@ -280,7 +282,7 @@ func (m *Manager) QueryHeuristics(nodes []NodeID) (HeuristicScores, error) {
} }
log.Debugf("Querying heuristics for %d nodes", len(n)) log.Debugf("Querying heuristics for %d nodes", len(n))
return m.queryHeuristics(n) return m.queryHeuristics(n, localState)
} }
// HeuristicScores is an alias for a map that maps heuristic names to a map of // HeuristicScores is an alias for a map that maps heuristic names to a map of
@ -291,25 +293,32 @@ type HeuristicScores map[string]map[NodeID]float64
// the agent's current active heuristic. // the agent's current active heuristic.
// //
// NOTE: Must be called with the manager's lock. // NOTE: Must be called with the manager's lock.
func (m *Manager) queryHeuristics(nodes map[NodeID]struct{}) ( func (m *Manager) queryHeuristics(nodes map[NodeID]struct{}, localState bool) (
HeuristicScores, error) { HeuristicScores, error) {
// Fetch the current set of channels. // If we want to take the local state into action when querying the
totalChans, err := m.cfg.ChannelState() // heuristics, we fetch it. If not we'll just pass an emply slice to
if err != nil { // the heuristic.
return nil, err var totalChans []Channel
} var err error
if localState {
// Fetch the current set of channels.
totalChans, err = m.cfg.ChannelState()
if err != nil {
return nil, err
}
// If the agent is active, we can merge the channel state with the // If the agent is active, we can merge the channel state with
// channels pending open. // the channels pending open.
if m.pilot != nil { if m.pilot != nil {
m.pilot.chanStateMtx.Lock() m.pilot.chanStateMtx.Lock()
m.pilot.pendingMtx.Lock() m.pilot.pendingMtx.Lock()
totalChans = mergeChanState( totalChans = mergeChanState(
m.pilot.pendingOpens, m.pilot.chanState, m.pilot.pendingOpens, m.pilot.chanState,
) )
m.pilot.pendingMtx.Unlock() m.pilot.pendingMtx.Unlock()
m.pilot.chanStateMtx.Unlock() m.pilot.chanStateMtx.Unlock()
}
} }
// As channel size we'll use the maximum size. // As channel size we'll use the maximum size.

@ -180,7 +180,9 @@ func (s *Server) QueryScores(ctx context.Context, in *QueryScoresRequest) (
} }
// Query the heuristics. // Query the heuristics.
heuristicScores, err := s.manager.QueryHeuristics(nodes) heuristicScores, err := s.manager.QueryHeuristics(
nodes, !in.IgnoreLocalState,
)
if err != nil { if err != nil {
return nil, err return nil, err
} }