mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-29 15:11:09 +02:00
refactor: move various duties from ChannelRouter to graph.Builder
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.
This commit is contained in:
69
graph/stats.go
Normal file
69
graph/stats.go
Normal file
@@ -0,0 +1,69 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user