autopilot/agent: add queryHeuristics
This commit adds a method queryHeuristic that will query all simple heuristics for node scores, in addition to the current active heuristic.
This commit is contained in:
parent
cf01879d96
commit
6c556fd92a
@ -768,3 +768,55 @@ func (a *Agent) executeDirective(directive AttachmentDirective) {
|
||||
// we'll trigger the autopilot agent to query for more peers.
|
||||
a.OnChannelPendingOpen()
|
||||
}
|
||||
|
||||
// HeuristicScores is an alias for a map that maps heuristic names to a map of
|
||||
// scores for pubkeys.
|
||||
type HeuristicScores map[string]map[NodeID]float64
|
||||
|
||||
// queryHeuristics gets node scores from all available simple heuristics, and
|
||||
// the agent's current active heuristic.
|
||||
func (a *Agent) queryHeuristics(nodes map[NodeID]struct{}) (
|
||||
HeuristicScores, error) {
|
||||
|
||||
// Get the agent's current channel state.
|
||||
a.chanStateMtx.Lock()
|
||||
a.pendingMtx.Lock()
|
||||
totalChans := mergeChanState(a.pendingOpens, a.chanState)
|
||||
a.pendingMtx.Unlock()
|
||||
a.chanStateMtx.Unlock()
|
||||
|
||||
// As channel size we'll use the maximum size.
|
||||
chanSize := a.cfg.Constraints.MaxChanSize()
|
||||
|
||||
// We'll start by getting the scores from each available sub-heuristic,
|
||||
// in addition the active agent heuristic.
|
||||
report := make(HeuristicScores)
|
||||
for _, h := range append(availableHeuristics, a.cfg.Heuristic) {
|
||||
name := h.Name()
|
||||
|
||||
// If the active agent heuristic is among the simple heuristics
|
||||
// it might get queried more than once. As an optimization
|
||||
// we'll just skip it the second time.
|
||||
if _, ok := report[name]; ok {
|
||||
continue
|
||||
}
|
||||
|
||||
s, err := h.NodeScores(
|
||||
a.cfg.Graph, totalChans, chanSize, nodes,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get sub score: %v", err)
|
||||
}
|
||||
|
||||
log.Debugf("Heuristic \"%v\" scored %d nodes", name, len(s))
|
||||
|
||||
scores := make(map[NodeID]float64)
|
||||
for nID, score := range s {
|
||||
scores[nID] = score.Score
|
||||
}
|
||||
|
||||
report[name] = scores
|
||||
}
|
||||
|
||||
return report, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user