mirror of https://github.com/BTCPrivate/lnd.git
channeldb: slightly refactor the [Fetch|Put]Meta methods
This commit performs a slight refactoring of the internals (and API) of the [Fetch|Put]Meta methods. The changes are rather minor and simply eliminate the conditional branching structure with usage of an internal function. This new form is much easier to follow.
This commit is contained in:
parent
5b2f9a5b69
commit
7454b7df95
|
@ -337,7 +337,7 @@ func (d *DB) syncVersions(versions []version) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
meta.DbVersionNumber = latestVersion
|
meta.DbVersionNumber = latestVersion
|
||||||
if err := d.PutMeta(meta, tx); err != nil {
|
if err := putMeta(meta, tx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,27 +21,13 @@ type Meta struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchMeta fetches the meta data from boltdb and returns filled meta
|
// FetchMeta fetches the meta data from boltdb and returns filled meta
|
||||||
// structure. If transaction object is specified then it will be used rather
|
// structure.
|
||||||
// than initiation creation of new one.
|
|
||||||
func (d *DB) FetchMeta(tx *bolt.Tx) (*Meta, error) {
|
func (d *DB) FetchMeta(tx *bolt.Tx) (*Meta, error) {
|
||||||
meta := &Meta{}
|
meta := &Meta{}
|
||||||
fetchMeta := func(tx *bolt.Tx) error {
|
|
||||||
if metaBucket := tx.Bucket(metaBucket); metaBucket != nil {
|
|
||||||
fetchDbVersion(metaBucket, meta)
|
|
||||||
return nil
|
|
||||||
} else {
|
|
||||||
return ErrMetaNotFound
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var err error
|
|
||||||
|
|
||||||
if tx == nil {
|
|
||||||
err = d.store.View(fetchMeta)
|
|
||||||
} else {
|
|
||||||
err = fetchMeta(tx)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
err := d.View(func(tx *bolt.Tx) error {
|
||||||
|
return fetchMeta(meta, tx)
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -49,28 +35,42 @@ func (d *DB) FetchMeta(tx *bolt.Tx) (*Meta, error) {
|
||||||
return meta, nil
|
return meta, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutMeta gets as input meta structure and put it into boltdb. If transaction
|
// fetchMeta is an internal helper function used in order to allow callers to
|
||||||
// object is specified then it will be used rather than initiation creation of
|
// re-use a database transaction. See the publicly exported FetchMeta method
|
||||||
// new one.
|
// for more information.
|
||||||
func (d *DB) PutMeta(meta *Meta, tx *bolt.Tx) error {
|
func fetchMeta(meta *Meta, tx *bolt.Tx) error {
|
||||||
putMeta := func(tx *bolt.Tx) error {
|
metaBucket := tx.Bucket(metaBucket)
|
||||||
metaBucket := tx.Bucket(metaBucket)
|
if metaBucket == nil {
|
||||||
if metaBucket == nil {
|
return ErrMetaNotFound
|
||||||
return ErrMetaNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := putDbVersion(metaBucket, meta); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if tx == nil {
|
data := metaBucket.Get(dbVersionKey)
|
||||||
return d.store.Update(putMeta)
|
if data == nil {
|
||||||
|
meta.DbVersionNumber = getLatestDBVersion(dbVersions)
|
||||||
} else {
|
} else {
|
||||||
return putMeta(tx)
|
meta.DbVersionNumber = byteOrder.Uint32(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutMeta writes the passed instance of the database met-data struct to disk.
|
||||||
|
func (d *DB) PutMeta(meta *Meta) error {
|
||||||
|
return d.Update(func(tx *bolt.Tx) error {
|
||||||
|
return putMeta(meta, tx)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 *bolt.Tx) error {
|
||||||
|
metaBucket, err := tx.CreateBucketIfNotExists(metaBucket)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return putDbVersion(metaBucket, meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
func putDbVersion(metaBucket *bolt.Bucket, meta *Meta) error {
|
func putDbVersion(metaBucket *bolt.Bucket, meta *Meta) error {
|
||||||
|
@ -81,11 +81,3 @@ func putDbVersion(metaBucket *bolt.Bucket, meta *Meta) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchDbVersion(metaBucket *bolt.Bucket, meta *Meta) {
|
|
||||||
if data := metaBucket.Get(dbVersionKey); data != nil {
|
|
||||||
meta.DbVersionNumber = byteOrder.Uint32(data)
|
|
||||||
} else {
|
|
||||||
meta.DbVersionNumber = getLatestDBVersion(dbVersions)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ func TestVersionFetchPut(t *testing.T) {
|
||||||
var newVersion uint32 = getLatestDBVersion(dbVersions) + 1
|
var newVersion uint32 = getLatestDBVersion(dbVersions) + 1
|
||||||
meta.DbVersionNumber = newVersion
|
meta.DbVersionNumber = newVersion
|
||||||
|
|
||||||
if err := db.PutMeta(meta, nil); err != nil {
|
if err := db.PutMeta(meta); err != nil {
|
||||||
t.Fatalf("update of meta failed %v", err)
|
t.Fatalf("update of meta failed %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +129,9 @@ func applyMigration(t *testing.T, beforeMigration, afterMigration func(d *DB),
|
||||||
// Create test meta info with zero database version and put it on disk.
|
// Create test meta info with zero database version and put it on disk.
|
||||||
// Than creating the version list pretending that new version was added.
|
// Than creating the version list pretending that new version was added.
|
||||||
meta := &Meta{DbVersionNumber: 0}
|
meta := &Meta{DbVersionNumber: 0}
|
||||||
cdb.PutMeta(meta, nil)
|
if err := cdb.PutMeta(meta); err != nil {
|
||||||
|
t.Fatal("unable to store meta data: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
versions := []version{
|
versions := []version{
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue