2
0

db_bolt.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package manager
  2. import (
  3. "fmt"
  4. bolt "github.com/boltdb/bolt"
  5. )
  6. // implement kv interface backed by boltdb
  7. type boltAdapter struct {
  8. db *bolt.DB
  9. }
  10. func (b *boltAdapter) InitBucket(bucket string) (err error) {
  11. return b.db.Update(func(tx *bolt.Tx) error {
  12. _, err = tx.CreateBucketIfNotExists([]byte(bucket))
  13. if err != nil {
  14. return fmt.Errorf("create bucket %s error: %s", _workerBucketKey, err.Error())
  15. }
  16. return nil
  17. })
  18. }
  19. func (b *boltAdapter) Get(bucket string, key string) (v []byte, err error) {
  20. err = b.db.View(func(tx *bolt.Tx) error {
  21. bucket := tx.Bucket([]byte(bucket))
  22. v = bucket.Get([]byte(key))
  23. return nil
  24. })
  25. return
  26. }
  27. func (b *boltAdapter) GetAll(bucket string) (m map[string][]byte, err error) {
  28. err = b.db.View(func(tx *bolt.Tx) error {
  29. bucket := tx.Bucket([]byte(bucket))
  30. c := bucket.Cursor()
  31. m = make(map[string][]byte)
  32. for k, v := c.First(); k != nil; k, v = c.Next() {
  33. m[string(k)] = v
  34. }
  35. return nil
  36. })
  37. return
  38. }
  39. func (b *boltAdapter) Put(bucket string, key string, value []byte) error {
  40. err := b.db.Update(func(tx *bolt.Tx) error {
  41. bucket := tx.Bucket([]byte(bucket))
  42. err := bucket.Put([]byte(key), value)
  43. return err
  44. })
  45. return err
  46. }
  47. func (b *boltAdapter) Delete(bucket string, key string) error {
  48. err := b.db.Update(func(tx *bolt.Tx) error {
  49. bucket := tx.Bucket([]byte(bucket))
  50. err := bucket.Delete([]byte(key))
  51. return err
  52. })
  53. return err
  54. }
  55. func (b *boltAdapter) Close() error {
  56. return b.db.Close()
  57. }