65 lines
1022 B
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()
|
|
}
|