forked from lightningnetwork/lnd
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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.
- Loading branch information
1 parent
30e6671
commit 0b7364f
Showing
4 changed files
with
120 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package graph | ||
|
||
import ( | ||
"github.com/btcsuite/btclog" | ||
"github.com/lightningnetwork/lnd/build" | ||
) | ||
|
||
// log is a logger that is initialized with no output filters. This means the | ||
// package will not perform any logging by default until the caller requests | ||
// it. | ||
var log btclog.Logger | ||
|
||
const Subsystem = "GRPH" | ||
|
||
// The default amount of logging is none. | ||
func init() { | ||
UseLogger(build.NewSubLogger(Subsystem, nil)) | ||
} | ||
|
||
// DisableLog disables all library log output. Logging output is disabled by | ||
// by default until UseLogger is called. | ||
func DisableLog() { | ||
UseLogger(btclog.Disabled) | ||
} | ||
|
||
// UseLogger uses a specified Logger to output package logging info. This | ||
// should be used in preference to SetLogWriter if the caller is also using | ||
// btclog. | ||
func UseLogger(logger btclog.Logger) { | ||
log = logger | ||
} | ||
|
||
// logClosure is used to provide a closure over expensive logging operations so | ||
// don't have to be performed when the logging level doesn't warrant it. | ||
type logClosure func() string | ||
|
||
// String invokes the underlying function and returns the result. | ||
func (c logClosure) String() string { | ||
return c() | ||
} | ||
|
||
// newLogClosure returns a new closure over a function that returns a string | ||
// which itself provides a Stringer interface so that it can be used with the | ||
// logging system. | ||
func newLogClosure(c func() string) logClosure { | ||
return logClosure(c) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters