channeldb/migration: add generic CreateTLB migration
This commit creates a generic migration for creating top-level buckets.
This commit is contained in:
parent
24cce7a6ec
commit
e80e21d1a8
|
@ -3,6 +3,7 @@ package channeldb
|
||||||
import (
|
import (
|
||||||
"github.com/btcsuite/btclog"
|
"github.com/btcsuite/btclog"
|
||||||
"github.com/lightningnetwork/lnd/build"
|
"github.com/lightningnetwork/lnd/build"
|
||||||
|
mig "github.com/lightningnetwork/lnd/channeldb/migration"
|
||||||
"github.com/lightningnetwork/lnd/channeldb/migration12"
|
"github.com/lightningnetwork/lnd/channeldb/migration12"
|
||||||
"github.com/lightningnetwork/lnd/channeldb/migration13"
|
"github.com/lightningnetwork/lnd/channeldb/migration13"
|
||||||
"github.com/lightningnetwork/lnd/channeldb/migration_01_to_11"
|
"github.com/lightningnetwork/lnd/channeldb/migration_01_to_11"
|
||||||
|
@ -28,6 +29,7 @@ func DisableLog() {
|
||||||
// using btclog.
|
// using btclog.
|
||||||
func UseLogger(logger btclog.Logger) {
|
func UseLogger(logger btclog.Logger) {
|
||||||
log = logger
|
log = logger
|
||||||
|
mig.UseLogger(logger)
|
||||||
migration_01_to_11.UseLogger(logger)
|
migration_01_to_11.UseLogger(logger)
|
||||||
migration12.UseLogger(logger)
|
migration12.UseLogger(logger)
|
||||||
migration13.UseLogger(logger)
|
migration13.UseLogger(logger)
|
||||||
|
|
27
channeldb/migration/create_tlb.go
Normal file
27
channeldb/migration/create_tlb.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package migration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CreateTLB creates a new top-level bucket with the passed bucket identifier.
|
||||||
|
func CreateTLB(bucket []byte) func(kvdb.RwTx) error {
|
||||||
|
return func(tx kvdb.RwTx) error {
|
||||||
|
log.Infof("Creating top-level bucket: \"%s\" ...", bucket)
|
||||||
|
|
||||||
|
if tx.ReadBucket(bucket) != nil {
|
||||||
|
return fmt.Errorf("top-level bucket \"%s\" "+
|
||||||
|
"already exists", bucket)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := tx.CreateTopLevelBucket(bucket)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Created top-level bucket: \"%s\"", bucket)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
57
channeldb/migration/create_tlb_test.go
Normal file
57
channeldb/migration/create_tlb_test.go
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
package migration_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/migration"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/migtest"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TestCreateTLB asserts that a CreateTLB properly initializes a new top-level
|
||||||
|
// bucket, and that it succeeds even if the bucket already exists. It would
|
||||||
|
// probably be better if the latter failed, but the kvdb abstraction doesn't
|
||||||
|
// support this.
|
||||||
|
func TestCreateTLB(t *testing.T) {
|
||||||
|
newBucket := []byte("hello")
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
beforeMigration func(kvdb.RwTx) error
|
||||||
|
shouldFail bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "already exists",
|
||||||
|
beforeMigration: func(tx kvdb.RwTx) error {
|
||||||
|
_, err := tx.CreateTopLevelBucket(newBucket)
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
shouldFail: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "does not exist",
|
||||||
|
beforeMigration: func(_ kvdb.RwTx) error { return nil },
|
||||||
|
shouldFail: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
test := test
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
migtest.ApplyMigration(
|
||||||
|
t,
|
||||||
|
test.beforeMigration,
|
||||||
|
func(tx kvdb.RwTx) error {
|
||||||
|
if tx.ReadBucket(newBucket) != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return fmt.Errorf("bucket \"%s\" not "+
|
||||||
|
"created", newBucket)
|
||||||
|
},
|
||||||
|
migration.CreateTLB(newBucket),
|
||||||
|
test.shouldFail,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
12
channeldb/migration/log.go
Normal file
12
channeldb/migration/log.go
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package migration
|
||||||
|
|
||||||
|
import "github.com/btcsuite/btclog"
|
||||||
|
|
||||||
|
// log is a logger that is initialized as disabled. This means the package will
|
||||||
|
// not perform any logging by default until a logger is set.
|
||||||
|
var log = btclog.Disabled
|
||||||
|
|
||||||
|
// UseLogger uses a specified Logger to output package logging info.
|
||||||
|
func UseLogger(logger btclog.Logger) {
|
||||||
|
log = logger
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user