2
0

db_leveldb.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package manager
  2. import (
  3. "github.com/syndtr/goleveldb/leveldb"
  4. "github.com/syndtr/goleveldb/leveldb/util"
  5. )
  6. // implement kv interface backed by leveldb
  7. type leveldbAdapter struct {
  8. db *leveldb.DB
  9. }
  10. func (b *leveldbAdapter) InitBucket(bucket string) (err error) {
  11. // no-op
  12. return
  13. }
  14. func (b *leveldbAdapter) Get(bucket string, key string) (v []byte, err error) {
  15. v, err = b.db.Get([]byte(bucket+key), nil)
  16. return
  17. }
  18. func (b *leveldbAdapter) GetAll(bucket string) (m map[string][]byte, err error) {
  19. it := b.db.NewIterator(util.BytesPrefix([]byte(bucket)), nil)
  20. defer it.Release()
  21. m = make(map[string][]byte)
  22. for it.Next() {
  23. k := string(it.Key())
  24. actualKey := k[len(bucket):]
  25. // it.Value() changes on next iteration
  26. val := it.Value()
  27. v := make([]byte, len(val))
  28. copy(v, val)
  29. m[actualKey] = v
  30. }
  31. return
  32. }
  33. func (b *leveldbAdapter) Put(bucket string, key string, value []byte) error {
  34. err := b.db.Put([]byte(bucket+key), []byte(value), nil)
  35. return err
  36. }
  37. func (b *leveldbAdapter) Delete(bucket string, key string) error {
  38. err := b.db.Delete([]byte(bucket+key), nil)
  39. return err
  40. }
  41. func (b *leveldbAdapter) Close() error {
  42. return b.db.Close()
  43. }