mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-04-08 03:58:05 +02:00
Merge pull request #6084 from guggero/backend-readonly
channeldb: allow to be used read-only in external tools
This commit is contained in:
commit
22607a1c53
@ -263,15 +263,17 @@ func Open(dbPath string, modifiers ...OptionModifier) (*DB, error) {
|
||||
// CreateWithBackend creates channeldb instance using the passed kvdb.Backend.
|
||||
// Any necessary schemas migrations due to updates will take place as necessary.
|
||||
func CreateWithBackend(backend kvdb.Backend, modifiers ...OptionModifier) (*DB, error) {
|
||||
if err := initChannelDB(backend); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
opts := DefaultOptions()
|
||||
for _, modifier := range modifiers {
|
||||
modifier(&opts)
|
||||
}
|
||||
|
||||
if !opts.NoMigration {
|
||||
if err := initChannelDB(backend); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
chanDB := &DB{
|
||||
Backend: backend,
|
||||
channelStateDB: &ChannelStateDB{
|
||||
@ -291,16 +293,18 @@ func CreateWithBackend(backend kvdb.Backend, modifiers ...OptionModifier) (*DB,
|
||||
chanDB.graph, err = NewChannelGraph(
|
||||
backend, opts.RejectCacheSize, opts.ChannelCacheSize,
|
||||
opts.BatchCommitInterval, opts.PreAllocCacheNumNodes,
|
||||
opts.UseGraphCache,
|
||||
opts.UseGraphCache, opts.NoMigration,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Synchronize the version of database and apply migrations if needed.
|
||||
if err := chanDB.syncVersions(dbVersions); err != nil {
|
||||
backend.Close()
|
||||
return nil, err
|
||||
if !opts.NoMigration {
|
||||
if err := chanDB.syncVersions(dbVersions); err != nil {
|
||||
backend.Close()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return chanDB, nil
|
||||
|
@ -189,10 +189,12 @@ type ChannelGraph struct {
|
||||
// returned instance has its own unique reject cache and channel cache.
|
||||
func NewChannelGraph(db kvdb.Backend, rejectCacheSize, chanCacheSize int,
|
||||
batchCommitInterval time.Duration, preAllocCacheNumNodes int,
|
||||
useGraphCache bool) (*ChannelGraph, error) {
|
||||
useGraphCache, noMigrations bool) (*ChannelGraph, error) {
|
||||
|
||||
if err := initChannelGraph(db); err != nil {
|
||||
return nil, err
|
||||
if !noMigrations {
|
||||
if err := initChannelGraph(db); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
g := &ChannelGraph{
|
||||
|
@ -77,7 +77,7 @@ func MakeTestGraph(modifiers ...OptionModifier) (*ChannelGraph, func(), error) {
|
||||
graph, err := NewChannelGraph(
|
||||
backend, opts.RejectCacheSize, opts.ChannelCacheSize,
|
||||
opts.BatchCommitInterval, opts.PreAllocCacheNumNodes,
|
||||
true,
|
||||
true, false,
|
||||
)
|
||||
if err != nil {
|
||||
backendCleanup()
|
||||
|
@ -50,6 +50,11 @@ type Options struct {
|
||||
// path finding.
|
||||
UseGraphCache bool
|
||||
|
||||
// NoMigration specifies that underlying backend was opened in read-only
|
||||
// mode and migrations shouldn't be performed. This can be useful for
|
||||
// applications that use the channeldb package as a library.
|
||||
NoMigration bool
|
||||
|
||||
// clock is the time source used by the database.
|
||||
clock clock.Clock
|
||||
|
||||
@ -71,6 +76,7 @@ func DefaultOptions() Options {
|
||||
ChannelCacheSize: DefaultChannelCacheSize,
|
||||
PreAllocCacheNumNodes: DefaultPreAllocCacheNumNodes,
|
||||
UseGraphCache: true,
|
||||
NoMigration: false,
|
||||
clock: clock.NewDefaultClock(),
|
||||
}
|
||||
}
|
||||
@ -136,6 +142,14 @@ func OptionSetBatchCommitInterval(interval time.Duration) OptionModifier {
|
||||
}
|
||||
}
|
||||
|
||||
// OptionNoMigration allows the database to be opened in read only mode by
|
||||
// disabling migrations.
|
||||
func OptionNoMigration(b bool) OptionModifier {
|
||||
return func(o *Options) {
|
||||
o.NoMigration = b
|
||||
}
|
||||
}
|
||||
|
||||
// OptionClock sets a non-default clock dependency.
|
||||
func OptionClock(clock clock.Clock) OptionModifier {
|
||||
return func(o *Options) {
|
||||
|
@ -16,6 +16,9 @@
|
||||
for running lnd alongside a bitcoind service is now provided in
|
||||
`contrib/init/lnd.service`.
|
||||
|
||||
* [Allow disabling migrations if the database backend passed to `channeldb` was
|
||||
opened in read-only mode](https://github.com/lightningnetwork/lnd/pull/6084).
|
||||
|
||||
## Code Health
|
||||
|
||||
### Code cleanup, refactor, typo fixes
|
||||
|
@ -175,7 +175,7 @@ func makeTestGraph(useCache bool) (*channeldb.ChannelGraph, kvdb.Backend,
|
||||
graph, err := channeldb.NewChannelGraph(
|
||||
backend, opts.RejectCacheSize, opts.ChannelCacheSize,
|
||||
opts.BatchCommitInterval, opts.PreAllocCacheNumNodes,
|
||||
useCache,
|
||||
useCache, false,
|
||||
)
|
||||
if err != nil {
|
||||
cleanUp()
|
||||
|
Loading…
x
Reference in New Issue
Block a user