impl RAM db
parent
82fc7526d0
commit
c51e580e09
55
driver.go
55
driver.go
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"path"
|
"path"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.etcd.io/bbolt"
|
"go.etcd.io/bbolt"
|
||||||
|
|
@ -16,6 +17,60 @@ type Driver interface {
|
||||||
Set(context.Context, string, string, []byte) error
|
Set(context.Context, string, string, []byte) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RAM struct {
|
||||||
|
m map[string]map[string][]byte
|
||||||
|
lock *sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRAM() RAM {
|
||||||
|
return RAM{
|
||||||
|
m: make(map[string]map[string][]byte),
|
||||||
|
lock: &sync.RWMutex{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ram RAM) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ram RAM) ForEach(ctx context.Context, ns string, cb func(string, []byte) error) error {
|
||||||
|
ram.lock.RLock()
|
||||||
|
defer ram.lock.RUnlock()
|
||||||
|
|
||||||
|
for k, v := range ram.m[ns] {
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err := cb(k, v); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ram RAM) Get(_ context.Context, ns, id string) ([]byte, error) {
|
||||||
|
ram.lock.RLock()
|
||||||
|
defer ram.lock.RUnlock()
|
||||||
|
|
||||||
|
if _, ok := ram.m[ns]; !ok {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return ram.m[ns][id], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ram RAM) Set(_ context.Context, ns, id string, v []byte) error {
|
||||||
|
ram.lock.Lock()
|
||||||
|
defer ram.lock.Unlock()
|
||||||
|
|
||||||
|
if _, ok := ram.m[ns]; !ok {
|
||||||
|
ram.m[ns] = map[string][]byte{}
|
||||||
|
}
|
||||||
|
ram.m[ns][id] = v
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type BBolt struct {
|
type BBolt struct {
|
||||||
db *bbolt.DB
|
db *bbolt.DB
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,10 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestDriverRAM(t *testing.T) {
|
||||||
|
testDriver(t, NewRAM())
|
||||||
|
}
|
||||||
|
|
||||||
func TestDriverBBolt(t *testing.T) {
|
func TestDriverBBolt(t *testing.T) {
|
||||||
testDriver(t, NewTestDBIn(t.TempDir()))
|
testDriver(t, NewTestDBIn(t.TempDir()))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue