channeldb: convert to uniformly use new kvdb abstractions
In this commit, we migrate all the code in `channeldb` to only reference the new `kvdb` package rather than `bbolt` directly. In many instances, we need to add two version to fetch a bucket as both read and write when needed. As an example, we add a new `fetchChanBucketRw` function. This function is identical to `fetchChanBucket`, but it will be used to fetch the main channel bucket for all _write_ transactions. We need a new method as you can pass a write transaction where a read is accepted, but not the other way around due to the stronger typing of the new `kvdb` package.
This commit is contained in:
36 files changed
+804
-752
No files matched your search
+30
-26
@@ -5,8 +5,8 @@ import (
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
"github.com/coreos/bbolt"
|
||||
"github.com/go-errors/errors"
|
||||
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
||||
)
|
||||
|
||||
// applyMigration is a helper test function that encapsulates the general steps
|
||||
@@ -121,11 +121,11 @@ func TestOrderOfMigrations(t *testing.T) {
|
||||
versions := []version{
|
||||
{0, nil},
|
||||
{1, nil},
|
||||
{2, func(tx *bbolt.Tx) error {
|
||||
{2, func(tx kvdb.RwTx) error {
|
||||
appliedMigration = 2
|
||||
return nil
|
||||
}},
|
||||
{3, func(tx *bbolt.Tx) error {
|
||||
{3, func(tx kvdb.RwTx) error {
|
||||
appliedMigration = 3
|
||||
return nil
|
||||
}},
|
||||
@@ -197,21 +197,23 @@ func TestMigrationWithPanic(t *testing.T) {
|
||||
beforeMigrationFunc := func(d *DB) {
|
||||
// Insert data in database and in order then make sure that the
|
||||
// key isn't changes in case of panic or fail.
|
||||
d.Update(func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
err := kvdb.Update(d, func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bucket.Put(keyPrefix, beforeMigration)
|
||||
return nil
|
||||
return bucket.Put(keyPrefix, beforeMigration)
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unable to insert: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Create migration function which changes the initially created data and
|
||||
// throw the panic, in this case we pretending that something goes.
|
||||
migrationWithPanic := func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
migrationWithPanic := func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -231,8 +233,8 @@ func TestMigrationWithPanic(t *testing.T) {
|
||||
t.Fatal("migration panicked but version is changed")
|
||||
}
|
||||
|
||||
err = d.Update(func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
err = kvdb.Update(d, func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -268,22 +270,24 @@ func TestMigrationWithFatal(t *testing.T) {
|
||||
afterMigration := []byte("aftermigration")
|
||||
|
||||
beforeMigrationFunc := func(d *DB) {
|
||||
d.Update(func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
err := kvdb.Update(d, func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bucket.Put(keyPrefix, beforeMigration)
|
||||
return nil
|
||||
return bucket.Put(keyPrefix, beforeMigration)
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unable to insert pre migration key: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Create migration function which changes the initially created data and
|
||||
// return the error, in this case we pretending that something goes
|
||||
// wrong.
|
||||
migrationWithFatal := func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
migrationWithFatal := func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -303,8 +307,8 @@ func TestMigrationWithFatal(t *testing.T) {
|
||||
t.Fatal("migration failed but version is changed")
|
||||
}
|
||||
|
||||
err = d.Update(func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
err = kvdb.Update(d, func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -341,8 +345,8 @@ func TestMigrationWithoutErrors(t *testing.T) {
|
||||
|
||||
// Populate database with initial data.
|
||||
beforeMigrationFunc := func(d *DB) {
|
||||
d.Update(func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
kvdb.Update(d, func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -353,8 +357,8 @@ func TestMigrationWithoutErrors(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create migration function which changes the initially created data.
|
||||
migrationWithoutErrors := func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
migrationWithoutErrors := func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -375,8 +379,8 @@ func TestMigrationWithoutErrors(t *testing.T) {
|
||||
"successfully applied migration")
|
||||
}
|
||||
|
||||
err = d.Update(func(tx *bbolt.Tx) error {
|
||||
bucket, err := tx.CreateBucketIfNotExists(bucketPrefix)
|
||||
err = kvdb.Update(d, func(tx kvdb.RwTx) error {
|
||||
bucket, err := tx.CreateTopLevelBucket(bucketPrefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -419,7 +423,7 @@ func TestMigrationReversion(t *testing.T) {
|
||||
|
||||
// Update the database metadata to point to one more than the highest
|
||||
// known version.
|
||||
err = cdb.Update(func(tx *bbolt.Tx) error {
|
||||
err = kvdb.Update(cdb, func(tx kvdb.RwTx) error {
|
||||
newMeta := &Meta{
|
||||
DbVersionNumber: getLatestDBVersion(dbVersions) + 1,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user