write code frame
This commit is contained in:
51
state.go
Normal file
51
state.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
|
||||
bolt "go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
var bucketName = []byte("migrator_state")
|
||||
|
||||
// openStateDB opens (or creates) a BoltDB at given path.
|
||||
func openStateDB(path string) (*bolt.DB, error) {
|
||||
return bolt.Open(path, 0600, nil)
|
||||
}
|
||||
|
||||
// getLastUID returns last migrated UID for given key.
|
||||
func getLastUID(db *bolt.DB, key string) (uint32, error) {
|
||||
var uid uint32
|
||||
err := db.View(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket(bucketName)
|
||||
if b == nil {
|
||||
return nil
|
||||
}
|
||||
v := b.Get([]byte(key))
|
||||
if v == nil {
|
||||
return nil
|
||||
}
|
||||
uid = binary.BigEndian.Uint32(v)
|
||||
return nil
|
||||
})
|
||||
return uid, err
|
||||
}
|
||||
|
||||
// setLastUID updates last migrated UID for given key.
|
||||
func setLastUID(db *bolt.DB, key string, uid uint32) error {
|
||||
return db.Update(func(tx *bolt.Tx) error {
|
||||
b, err := tx.CreateBucketIfNotExists(bucketName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
buf := make([]byte, 4)
|
||||
binary.BigEndian.PutUint32(buf, uid)
|
||||
return b.Put([]byte(key), buf)
|
||||
})
|
||||
}
|
||||
|
||||
// formatStateKey creates state key from src, dst and mailbox.
|
||||
func formatStateKey(src, dst, mbox string) string {
|
||||
return fmt.Sprintf("%s|%s|%s", src, dst, mbox)
|
||||
}
|
||||
Reference in New Issue
Block a user