fix(singleuser): fix bugs in single user handlers
This commit is contained in:
parent
31a1a331f7
commit
4d6e7ff938
10 changed files with 194 additions and 45 deletions
|
@ -27,6 +27,7 @@ func New(dbPath string, maxStrLen int) *BoltPvd {
|
|||
|
||||
buckets := []string{"bools", "ints", "int64s", "floats", "strings", "locks"}
|
||||
for _, bucketName := range buckets {
|
||||
// TODO: should return err
|
||||
db.Update(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte(bucketName))
|
||||
if b != nil {
|
||||
|
@ -48,6 +49,18 @@ func New(dbPath string, maxStrLen int) *BoltPvd {
|
|||
}
|
||||
}
|
||||
|
||||
func (bp *BoltPvd) AddNamespace(nsName string) error {
|
||||
return bp.db.Update(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte(nsName))
|
||||
if b != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
_, err := tx.CreateBucket([]byte(nsName))
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
func (bp *BoltPvd) Close() error {
|
||||
return bp.db.Close()
|
||||
}
|
||||
|
@ -223,3 +236,26 @@ func (bp *BoltPvd) Unlock(key string) error {
|
|||
return kvstore.ErrNoLock
|
||||
})
|
||||
}
|
||||
|
||||
func (bp *BoltPvd) GetStringIn(namespace, key string) (string, bool) {
|
||||
buf, ok, length := make([]byte, bp.maxStrLen), false, bp.maxStrLen
|
||||
bp.db.View(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte(namespace))
|
||||
v := b.Get([]byte(key))
|
||||
length = copy(buf, v)
|
||||
ok = v != nil
|
||||
return nil
|
||||
})
|
||||
return string(buf[:length]), ok
|
||||
}
|
||||
|
||||
func (bp *BoltPvd) SetStringIn(namespace, key, val string) error {
|
||||
if len(val) > bp.maxStrLen {
|
||||
return fmt.Errorf("can not set string value longer than %d", bp.maxStrLen)
|
||||
}
|
||||
|
||||
return bp.db.Update(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte(namespace))
|
||||
return b.Put([]byte(key), []byte(val))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ var ErrLocked = errors.New("already locked")
|
|||
var ErrNoLock = errors.New("no lock to unlock")
|
||||
|
||||
type IKVStore interface {
|
||||
AddNamespace(nsName string) error
|
||||
GetBool(key string) (bool, bool)
|
||||
SetBool(key string, val bool) error
|
||||
DelBool(key string) error
|
||||
|
@ -19,8 +20,10 @@ type IKVStore interface {
|
|||
SetFloat(key string, val float64) error
|
||||
DelFloat(key string) error
|
||||
GetString(key string) (string, bool)
|
||||
SetString(key string, val string) error
|
||||
SetString(key, val string) error
|
||||
DelString(key string) error
|
||||
GetStringIn(namespace, key string) (string, bool)
|
||||
SetStringIn(namespace, key, val string) error
|
||||
TryLock(key string) error
|
||||
Unlock(key string) error
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue