Skip to content

Commit

Permalink
config: unify old and new config values for sync-freelist
Browse files Browse the repository at this point in the history
In this commit, unify the old and new values for `sync-freelist`, and
also ensure that we don't break behavior for any users that're using the
_old_ value.

To do this, we first rename what was `--db.bolt.no-sync-freelist`, to
`--db.bolt.sync-freelist`. This gets rid of the negation on the config
level, and lets us override that value if the user is specifying the
legacy config option.

In the future, we'll deprecate the old config option, in favor of the
new DB scoped option.
  • Loading branch information
Roasbeef committed Aug 5, 2020
1 parent 675c1b9 commit e616903
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 12 deletions.
2 changes: 1 addition & 1 deletion channeldb/kvdb/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const EtcdBackendName = "etcd"

// BoltConfig holds bolt configuration.
type BoltConfig struct {
NoFreeListSync bool `long:"nofreelistsync" description:"If true, prevents the database from syncing its freelist to disk"`
SyncFreelist bool `long:"nofreelistsync" description:"Whether the databases used within lnd should sync their freelist to disk. This is disabled by default resulting in improved memory performance during operation, but with an increase in startup time."`
}

// EtcdConfig holds etcd configuration.
Expand Down
8 changes: 8 additions & 0 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -1097,6 +1097,14 @@ func ValidateConfig(cfg Config, usageMessage string) (*Config, error) {
"minbackoff")
}

// Newer versions of lnd added a new sub-config for bolt-specific
// parameters. However we want to also allow existing users to use the
// value on the top-level config. If the outer config value is set,
// then we'll use that directly.
if cfg.SyncFreelist {
cfg.DB.Bolt.SyncFreelist = cfg.SyncFreelist
}

// Validate the subconfigs for workers, caches, and the tower client.
err = lncfg.Validate(
cfg.Workers,
Expand Down
22 changes: 11 additions & 11 deletions lncfg/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (

const (
dbName = "channel.db"
boltBackend = "bolt"
etcdBackend = "etcd"
BoltBackend = "bolt"
EtcdBackend = "etcd"
)

// DB holds database configuration for LND.
Expand All @@ -25,26 +25,24 @@ type DB struct {
// NewDB creates and returns a new default DB config.
func DefaultDB() *DB {
return &DB{
Backend: boltBackend,
Bolt: &kvdb.BoltConfig{
NoFreeListSync: true,
},
Backend: BoltBackend,
Bolt: &kvdb.BoltConfig{},
}
}

// Validate validates the DB config.
func (db *DB) Validate() error {
switch db.Backend {
case boltBackend:
case BoltBackend:

case etcdBackend:
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)
BoltBackend, EtcdBackend)
}

return nil
Expand All @@ -54,12 +52,14 @@ func (db *DB) Validate() error {
func (db *DB) GetBackend(ctx context.Context, dbPath string,
networkName string) (kvdb.Backend, error) {

if db.Backend == etcdBackend {
if db.Backend == EtcdBackend {
// Prefix will separate key/values in the db.
return kvdb.GetEtcdBackend(ctx, networkName, db.Etcd)
}

return kvdb.GetBoltBackend(dbPath, dbName, db.Bolt.NoFreeListSync)
// The implementation by walletdb accepts "noFreelistSync" as the
// second parameter, so we negate here.
return kvdb.GetBoltBackend(dbPath, dbName, !db.Bolt.SyncFreelist)
}

// Compile-time constraint to ensure Workers implements the Validator interface.
Expand Down

0 comments on commit e616903

Please sign in to comment.