2
0

db_badger.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package manager
  2. import (
  3. "github.com/dgraph-io/badger/v2"
  4. )
  5. // implement kv interface backed by badger
  6. type badgerAdapter struct {
  7. db *badger.DB
  8. }
  9. func (b *badgerAdapter) InitBucket(bucket string) (err error) {
  10. // no-op
  11. return
  12. }
  13. func (b *badgerAdapter) Get(bucket string, key string) (v []byte, err error) {
  14. b.db.View(func(tx *badger.Txn) error {
  15. var item *badger.Item
  16. item, err = tx.Get([]byte(bucket + key))
  17. if item != nil {
  18. v, err = item.ValueCopy(nil)
  19. }
  20. return nil
  21. })
  22. return
  23. }
  24. func (b *badgerAdapter) GetAll(bucket string) (m map[string][]byte, err error) {
  25. b.db.View(func(tx *badger.Txn) error {
  26. it := tx.NewIterator(badger.DefaultIteratorOptions)
  27. defer it.Close()
  28. prefix := []byte(bucket)
  29. m = make(map[string][]byte)
  30. for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
  31. item := it.Item()
  32. k := string(item.Key())
  33. actualKey := k[len(bucket):]
  34. var v []byte
  35. v, err = item.ValueCopy(nil)
  36. m[actualKey] = v
  37. }
  38. return nil
  39. })
  40. return
  41. }
  42. func (b *badgerAdapter) Put(bucket string, key string, value []byte) error {
  43. err := b.db.Update(func(tx *badger.Txn) error {
  44. err := tx.Set([]byte(bucket+key), value)
  45. return err
  46. })
  47. return err
  48. }
  49. func (b *badgerAdapter) Delete(bucket string, key string) error {
  50. err := b.db.Update(func(tx *badger.Txn) error {
  51. err := tx.Delete([]byte(bucket + key))
  52. return err
  53. })
  54. return err
  55. }
  56. func (b *badgerAdapter) Close() error {
  57. return b.db.Close()
  58. }