48 lines
891 B
Go
48 lines
891 B
Go
package bolt
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"log"
|
|
|
|
"go.etcd.io/bbolt"
|
|
)
|
|
|
|
const (
|
|
DB_VERSION byte = 'v'
|
|
)
|
|
|
|
const target = 1
|
|
|
|
func (b *BoltBackend) migrate() error {
|
|
return b.DB.Update(func(txn *bbolt.Tx) error {
|
|
bucket := txn.Bucket(settingsStore)
|
|
|
|
val := bucket.Get([]byte("version"))
|
|
|
|
var version uint16 = target
|
|
if val == nil {
|
|
version = binary.BigEndian.Uint16(val)
|
|
}
|
|
|
|
// do the migrations in increasing steps (there is no rollback)
|
|
if version < target {
|
|
log.Printf("[bolt] migration %d: reindex everything\n", target)
|
|
|
|
// bump version
|
|
if err := b.setVersion(txn, target); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (b *BoltBackend) setVersion(txn *bbolt.Tx, v uint16) error {
|
|
bucket := txn.Bucket(settingsStore)
|
|
|
|
var newVersion [2]byte
|
|
binary.BigEndian.PutUint16(newVersion[:], v)
|
|
return bucket.Put([]byte("version"), newVersion[:])
|
|
}
|