Implement namespace optional arg

This commit is contained in:
Bel LaPointe
2019-03-20 09:54:26 -06:00
parent b79cb97ba6
commit b7a231feaf
10 changed files with 101 additions and 45 deletions

View File

@@ -1,6 +1,8 @@
package storage
import (
"path"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/filter"
"github.com/syndtr/goleveldb/leveldb/opt"
@@ -19,14 +21,15 @@ func NewLevelDB(path string) (*LevelDB, error) {
}, err
}
func (ldb *LevelDB) Get(key string) ([]byte, error) {
func (ldb *LevelDB) Get(key string, ns ...string) ([]byte, error) {
namespace := resolveNamespace(ns)
snapshot, err := ldb.db.GetSnapshot()
if err != nil {
return nil, err
}
defer snapshot.Release()
v, err := snapshot.Get([]byte(key), nil)
v, err := snapshot.Get([]byte(path.Join(namespace, key)), nil)
if err == leveldb.ErrNotFound {
err = ErrNotFound
} else if err != nil {
@@ -36,9 +39,10 @@ func (ldb *LevelDB) Get(key string) ([]byte, error) {
return v, err
}
func (ldb *LevelDB) Set(key string, value []byte) error {
func (ldb *LevelDB) Set(key string, value []byte, ns ...string) error {
namespace := resolveNamespace(ns)
batch := &leveldb.Batch{}
batch.Put([]byte(key), value)
batch.Put([]byte(path.Join(namespace, key)), value)
return ldb.db.Write(batch, nil)
}