mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-27 10:11:57 +01:00
This commit extends etcd db with namespaces without additional storage space requirements. This is simply done by instead of using an all zero root bucket id, we use the sha256 hash of the name space as our root bucket id.
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package lncfg
|
|
|
|
import (
|
|
"fmt"
|
|
"path"
|
|
|
|
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
|
)
|
|
|
|
const (
|
|
dbName = "channel.db"
|
|
boltBackend = "bolt"
|
|
etcdBackend = "etcd"
|
|
)
|
|
|
|
// DB holds database configuration for LND.
|
|
type DB struct {
|
|
Backend string `long:"backend" description:"The selected database backend."`
|
|
|
|
Etcd *kvdb.EtcdConfig `group:"etcd" namespace:"etcd" description:"Etcd settings."`
|
|
|
|
Bolt *kvdb.BoltConfig `group:"bolt" namespace:"bolt" description:"Bolt settings."`
|
|
}
|
|
|
|
// NewDB creates and returns a new default DB config.
|
|
func DefaultDB() *DB {
|
|
return &DB{
|
|
Backend: boltBackend,
|
|
Bolt: &kvdb.BoltConfig{
|
|
NoFreeListSync: true,
|
|
},
|
|
}
|
|
}
|
|
|
|
// Validate validates the DB config.
|
|
func (db *DB) Validate() error {
|
|
switch db.Backend {
|
|
case boltBackend:
|
|
|
|
case etcdBackend:
|
|
if db.Etcd.Host == "" {
|
|
return fmt.Errorf("etcd host must be set")
|
|
}
|
|
|
|
default:
|
|
return fmt.Errorf("unknown backend, must be either \"%v\" or \"%v\"",
|
|
boltBackend, etcdBackend)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetBackend returns a kvdb.Backend as set in the DB config.
|
|
func (db *DB) GetBackend(dbPath string) (kvdb.Backend, error) {
|
|
if db.Backend == etcdBackend {
|
|
// Prefix will separate key/values in the db.
|
|
prefix := path.Join(dbPath, dbName)
|
|
return kvdb.GetEtcdBackend(prefix, db.Etcd)
|
|
}
|
|
|
|
return kvdb.GetBoltBackend(dbPath, dbName, db.Bolt.NoFreeListSync)
|
|
}
|
|
|
|
// Compile-time constraint to ensure Workers implements the Validator interface.
|
|
var _ Validator = (*DB)(nil)
|