mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-06-29 18:10:48 +02:00
graph+server: add template for new graph Builder sub-system
This is preparation for an upcoming commit that will move over various responsibilities from the ChannelRouter to the graph Builder. So that that commit can be a pure code-move commit, the template for the new sub-system is added up front here.
This commit is contained in:
57
graph/builder.go
Normal file
57
graph/builder.go
Normal file
@ -0,0 +1,57 @@
|
||||
package graph
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
// Config holds the configuration required by the Builder.
|
||||
type Config struct{}
|
||||
|
||||
// Builder builds and maintains a view of the Lightning Network graph.
|
||||
type Builder struct {
|
||||
started atomic.Bool
|
||||
stopped atomic.Bool
|
||||
|
||||
cfg *Config
|
||||
|
||||
quit chan struct{}
|
||||
wg sync.WaitGroup
|
||||
}
|
||||
|
||||
// NewBuilder constructs a new Builder.
|
||||
func NewBuilder(cfg *Config) (*Builder, error) {
|
||||
return &Builder{
|
||||
cfg: cfg,
|
||||
quit: make(chan struct{}),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Start launches all the goroutines the Builder requires to carry out its
|
||||
// duties. If the builder has already been started, then this method is a noop.
|
||||
func (b *Builder) Start() error {
|
||||
if !b.started.CompareAndSwap(false, true) {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Info("Builder starting")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stop signals to the Builder that it should halt all routines. This method
|
||||
// will *block* until all goroutines have excited. If the builder has already
|
||||
// stopped then this method will return immediately.
|
||||
func (b *Builder) Stop() error {
|
||||
if !b.stopped.CompareAndSwap(false, true) {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Info("Builder shutting down...")
|
||||
defer log.Debug("Builder shutdown complete")
|
||||
|
||||
close(b.quit)
|
||||
b.wg.Wait()
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user