storage/riak.go

65 lines
1022 B
Go

package storage
import (
riak "github.com/basho/riak-go-client"
)
type Riak struct {
db *riak.Client
}
func NewRiak(addr string, addrs ...string) (*Riak, error) {
clientOpts := &riak.NewClientOptions{
RemoteAddresses: append(addrs, addr),
}
db, err := riak.NewClient(clientOpts)
if err != nil {
return nil, err
}
ok, err := db.Ping()
if !ok {
return nil, ErrCantConnect
}
return &Riak{
db: db,
}, err
}
func (r *Riak) Get(key string) ([]byte, error) {
obj := &riak.Object{}
cmd, err := riak.NewFetchValueCommandBuilder().
WithBucket(DefaultNamespace).
WithKey(key).
Build()
if err != nil {
return nil, err
}
err = r.db.Execute(cmd)
return obj.Value, err
}
func (r *Riak) Set(key string, value []byte) error {
obj := &riak.Object{
Value: value,
}
cmd, err := riak.NewStoreValueCommandBuilder().
WithBucket(DefaultNamespace).
WithContent(obj).
Build()
if err != nil {
return err
}
return r.db.Execute(cmd)
}
func (r *Riak) Close() error {
return r.db.Stop()
}