mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-03 12:03:37 +02:00
chanfitness: Add channel event store
This commit adds a channel event store to the channel fitness package which is used to manage tracking of a node's channels. It adds tracking for channel open/closed and peer online/offline events for all channels that a node has open. Events are consumed from channelNotifier and peerNotifier event subscriptions. If either of these subscriptions is cancelled, channel scoring stops, because both subscriptions are expected to run until node shutdown. Two functions are exposed to allow external callers to get uptime information about a channel. GetLifespan returns the period over which the channel has been monitored. GetUptime returns the channel's uptime over a specified period. Callers can use these functions to get the channel's remote peer uptime over its entire lifetime, or a subset of that period.
This commit is contained in:
18
server.go
18
server.go
@ -30,6 +30,7 @@ import (
|
||||
"github.com/lightningnetwork/lnd/brontide"
|
||||
"github.com/lightningnetwork/lnd/chanacceptor"
|
||||
"github.com/lightningnetwork/lnd/chanbackup"
|
||||
"github.com/lightningnetwork/lnd/chanfitness"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/channelnotifier"
|
||||
"github.com/lightningnetwork/lnd/contractcourt"
|
||||
@ -243,6 +244,10 @@ type server struct {
|
||||
// channelNotifier to be notified of newly opened and closed channels.
|
||||
chanSubSwapper *chanbackup.SubSwapper
|
||||
|
||||
// chanEventStore tracks the behaviour of channels and their remote peers to
|
||||
// provide insights into their health and performance.
|
||||
chanEventStore *chanfitness.ChannelEventStore
|
||||
|
||||
quit chan struct{}
|
||||
|
||||
wg sync.WaitGroup
|
||||
@ -1113,6 +1118,13 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
|
||||
// to peer online and offline events.
|
||||
s.peerNotifier = peernotifier.New()
|
||||
|
||||
// Create a channel event store which monitors all open channels.
|
||||
s.chanEventStore = chanfitness.NewChannelEventStore(&chanfitness.Config{
|
||||
SubscribeChannelEvents: s.channelNotifier.SubscribeChannelEvents,
|
||||
SubscribePeerEvents: s.peerNotifier.SubscribePeerEvents,
|
||||
GetOpenChannels: s.chanDB.FetchAllOpenChannels,
|
||||
})
|
||||
|
||||
if cfg.WtClient.Active {
|
||||
policy := wtpolicy.DefaultPolicy()
|
||||
|
||||
@ -1270,6 +1282,11 @@ func (s *server) Start() error {
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.chanEventStore.Start(); err != nil {
|
||||
startErr = err
|
||||
return
|
||||
}
|
||||
|
||||
// Before we start the connMgr, we'll check to see if we have
|
||||
// any backups to recover. We do this now as we want to ensure
|
||||
// that have all the information we need to handle channel
|
||||
@ -1385,6 +1402,7 @@ func (s *server) Stop() error {
|
||||
s.invoices.Stop()
|
||||
s.fundingMgr.Stop()
|
||||
s.chanSubSwapper.Stop()
|
||||
s.chanEventStore.Stop()
|
||||
|
||||
// Disconnect from each active peers to ensure that
|
||||
// peerTerminationWatchers signal completion to each peer.
|
||||
|
Reference in New Issue
Block a user