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  }