Make boltstore imlement binarystore
This commit is contained in:
parent
ee7c48dad7
commit
4d719daf39
@ -22,6 +22,7 @@ var bktKeyCerts = []byte("certs")
|
|||||||
var bktKeyKeys = []byte("keys")
|
var bktKeyKeys = []byte("keys")
|
||||||
var bktKeyUsers = []byte("users")
|
var bktKeyUsers = []byte("users")
|
||||||
var bktKeyRevoked = []byte("revoked")
|
var bktKeyRevoked = []byte("revoked")
|
||||||
|
var bktKeyBinary = []byte("binaries")
|
||||||
|
|
||||||
func NewBoltStore(path string) (*BoltStore, error) {
|
func NewBoltStore(path string) (*BoltStore, error) {
|
||||||
s := &BoltStore{}
|
s := &BoltStore{}
|
||||||
@ -46,6 +47,9 @@ func NewBoltStore(path string) (*BoltStore, error) {
|
|||||||
if _, err := t.CreateBucketIfNotExists(bktKeyRevoked); err != nil {
|
if _, err := t.CreateBucketIfNotExists(bktKeyRevoked); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if _, err := t.CreateBucketIfNotExists(bktKeyBinary); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -298,3 +302,35 @@ func (s *BoltStore) GetUserByUsername(username string) (*pb.User, error) {
|
|||||||
}
|
}
|
||||||
return nil, ErrNoSuchItem
|
return nil, ErrNoSuchItem
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BinaryStore
|
||||||
|
|
||||||
|
func binaryKey(version string, os string, arch string) []byte {
|
||||||
|
return []byte(fmt.Sprintf("%s,%s,%s", version, os, arch))
|
||||||
|
}
|
||||||
|
func (s *BoltStore) StoreBinary(release *pb.Binary) error {
|
||||||
|
return s.db.Update(func(tx *bolt.Tx) error {
|
||||||
|
bkt := tx.Bucket(bktKeyBinary)
|
||||||
|
key := binaryKey(release.Version, release.Os, release.Arch)
|
||||||
|
return bkt.Put(key, release.Data)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *BoltStore) GetBinary(version string, os string, arch string) (*pb.Binary, error) {
|
||||||
|
binary := &pb.Binary{}
|
||||||
|
err := s.db.View(func(tx *bolt.Tx) error {
|
||||||
|
bkt := tx.Bucket(bktKeyBinary)
|
||||||
|
key := binaryKey(version, os, arch)
|
||||||
|
binary.Data = bkt.Get(key)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if binary.Data == nil {
|
||||||
|
return nil, ErrNoSuchItem
|
||||||
|
}
|
||||||
|
|
||||||
|
return binary, nil
|
||||||
|
}
|
||||||
|
@ -37,3 +37,12 @@ func TestBoltUserStore(t *testing.T) {
|
|||||||
}
|
}
|
||||||
doUserStoreTests(s, t)
|
doUserStoreTests(s, t)
|
||||||
}
|
}
|
||||||
|
func TestBoltBinaryStore(t *testing.T) {
|
||||||
|
path := filepath.Join(t.TempDir(), "boltstore.db")
|
||||||
|
s, err := store.NewBoltStore(path)
|
||||||
|
defer s.Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Error opening store: %s", err)
|
||||||
|
}
|
||||||
|
doBinaryStoreTests(s, t)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user