f0911765af
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.
40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
package migration_01_to_11
|
|
|
|
import (
|
|
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
|
)
|
|
|
|
var (
|
|
// metaBucket stores all the meta information concerning the state of
|
|
// the database.
|
|
metaBucket = []byte("metadata")
|
|
|
|
// dbVersionKey is a boltdb key and it's used for storing/retrieving
|
|
// current database version.
|
|
dbVersionKey = []byte("dbp")
|
|
)
|
|
|
|
// Meta structure holds the database meta information.
|
|
type Meta struct {
|
|
// DbVersionNumber is the current schema version of the database.
|
|
DbVersionNumber uint32
|
|
}
|
|
|
|
// putMeta is an internal helper function used in order to allow callers to
|
|
// re-use a database transaction. See the publicly exported PutMeta method for
|
|
// more information.
|
|
func putMeta(meta *Meta, tx kvdb.RwTx) error {
|
|
metaBucket, err := tx.CreateTopLevelBucket(metaBucket)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return putDbVersion(metaBucket, meta)
|
|
}
|
|
|
|
func putDbVersion(metaBucket kvdb.RwBucket, meta *Meta) error {
|
|
scratch := make([]byte, 4)
|
|
byteOrder.PutUint32(scratch, meta.DbVersionNumber)
|
|
return metaBucket.Put(dbVersionKey, scratch)
|
|
}
|