mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 01:43:16 +01:00
7f1be39d45
This commit is a large refactor that moves over various responsibilities from the ChannelRouter to the graph.Builder. These include all graph related tasks such as: - graph pruning - validation of new network updates & persisting new updates - notifying topology update clients of any changes. This is a large commit but: - many of the files are purely moved from `routing` to `graph` - the business logic put in the graph Builder is copied exactly as is from the ChannelRouter with one exception: - The ChannelRouter just needs to be able to call the Builder's `ApplyChannelUpdate` method. So this is now exported and provided to the ChannelRouter as a config option. - The trickiest part was just moving over the test code since quite a bit had to be duplicated.
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package graph
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// routerStats is a struct that tracks various updates to the graph and
|
|
// facilitates aggregate logging of the statistics.
|
|
type routerStats struct {
|
|
numChannels uint32
|
|
numUpdates uint32
|
|
numNodes uint32
|
|
lastReset time.Time
|
|
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
// incNumEdges increments the number of discovered edges.
|
|
func (g *routerStats) incNumEdgesDiscovered() {
|
|
g.mu.Lock()
|
|
g.numChannels++
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// incNumUpdates increments the number of channel updates processed.
|
|
func (g *routerStats) incNumChannelUpdates() {
|
|
g.mu.Lock()
|
|
g.numUpdates++
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// incNumNodeUpdates increments the number of node updates processed.
|
|
func (g *routerStats) incNumNodeUpdates() {
|
|
g.mu.Lock()
|
|
g.numNodes++
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// Empty returns true if all stats are zero.
|
|
func (g *routerStats) Empty() bool {
|
|
g.mu.RLock()
|
|
isEmpty := g.numChannels == 0 &&
|
|
g.numUpdates == 0 &&
|
|
g.numNodes == 0
|
|
g.mu.RUnlock()
|
|
return isEmpty
|
|
}
|
|
|
|
// Reset clears any router stats and sets the lastReset field to now.
|
|
func (g *routerStats) Reset() {
|
|
g.mu.Lock()
|
|
g.numChannels = 0
|
|
g.numUpdates = 0
|
|
g.numNodes = 0
|
|
g.lastReset = time.Now()
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// String returns a human-readable description of the router stats.
|
|
func (g *routerStats) String() string {
|
|
g.mu.RLock()
|
|
str := fmt.Sprintf("Processed channels=%d updates=%d nodes=%d in "+
|
|
"last %v", g.numChannels, g.numUpdates, g.numNodes,
|
|
time.Since(g.lastReset))
|
|
g.mu.RUnlock()
|
|
return str
|
|
}
|