github.com/decred/dcrlnd@v0.7.6/watchtower/wtdb/db_common.go (about) 1 package wtdb 2 3 import ( 4 "encoding/binary" 5 "errors" 6 7 "github.com/decred/dcrlnd/kvdb" 8 ) 9 10 var ( 11 // metadataBkt stores all the meta information concerning the state of 12 // the database. 13 metadataBkt = []byte("metadata-bucket") 14 15 // dbVersionKey is a static key used to retrieve the database version 16 // number from the metadataBkt. 17 dbVersionKey = []byte("version") 18 19 // ErrUninitializedDB signals that top-level buckets for the database 20 // have not been initialized. 21 ErrUninitializedDB = errors.New("db not initialized") 22 23 // ErrNoDBVersion signals that the database contains no version info. 24 ErrNoDBVersion = errors.New("db has no version") 25 26 // byteOrder is the default endianness used when serializing integers. 27 byteOrder = binary.BigEndian 28 ) 29 30 // isFirstInit returns true if the given database has not yet been initialized, 31 // e.g. no metadata bucket is present yet. 32 func isFirstInit(db kvdb.Backend) (bool, error) { 33 var metadataExists bool 34 err := kvdb.View(db, func(tx kvdb.RTx) error { 35 metadataExists = tx.ReadBucket(metadataBkt) != nil 36 return nil 37 }, func() { 38 metadataExists = false 39 }) 40 if err != nil { 41 return false, err 42 } 43 44 return !metadataExists, nil 45 }