Documentation ¶
Overview ¶
Package riak is a riak-client, inspired by the Ruby riak-client gem and the riakpbc go package from mrb. It implements a connection to Riak using protobuf.
Index ¶
- Variables
- func IsWarning(err error) bool
- type Bucket
- func (b *Bucket) AllowMult() bool
- func (b *Bucket) Delete(key string, options ...map[string]uint32) (err error)
- func (b *Bucket) Exists(key string, options ...map[string]uint32) (exists bool, err error)
- func (b *Bucket) Get(key string, options ...map[string]uint32) (obj *RObject, err error)
- func (b *Bucket) IndexQuery(index string, key string) (keys []string, err error)
- func (b *Bucket) IndexQueryRange(index string, min string, max string) (keys []string, err error)
- func (b *Bucket) ListKeys() (response [][]byte, err error)
- func (b *Bucket) NVal() uint32
- func (b *Bucket) New(key string, options ...map[string]uint32) *RObject
- func (b *Bucket) SetAllowMult(allowMult bool) (err error)
- func (b *Bucket) SetNVal(nval uint32) (err error)
- type Client
- func (c *Client) Bucket(name string) (bucket *Bucket, err error)
- func (c *Client) Close()
- func (c *Client) Connect() (err error)
- func (client *Client) CounterGet(bucket, key string, options ...map[string]uint32) (int64, error)
- func (client *Client) CounterUpdate(bucket, key string, amount int64, options ...map[string]uint32) error
- func (c *Client) Id() (id string, err error)
- func (c *Client) Key(dest interface{}) (key string, err error)
- func (c *Client) Load(bucketname string, key string, dest Resolver, options ...map[string]uint32) (err error)
- func (c *Client) MapReduce() *MapReduce
- func (c *Client) New(bucketname string, key string, dest Resolver, options ...map[string]uint32) (err error)
- func (c *Client) Ping() (err error)
- func (c *Client) RunMapReduce(query string) (resp [][]byte, err error)
- func (c *Client) Save(dest Resolver) (err error)
- func (c *Client) SaveAs(newKey string, dest Resolver) (err error)
- func (c *Client) ServerVersion() (node string, version string, err error)
- func (c *Client) SetId(id string) (err error)
- func (c *Client) SetKey(newKey string, dest interface{}) (err error)
- type Link
- type Many
- type MapReduce
- func (mr *MapReduce) Add(bucket string, key string)
- func (mr *MapReduce) LinkBucket(name string, keep bool)
- func (mr *MapReduce) Map(fun string, keep bool)
- func (mr *MapReduce) MapErlang(module string, fun string, keep bool)
- func (mr *MapReduce) MapObjectValue(keep bool)
- func (mr *MapReduce) Query() (query []byte, err error)
- func (mr *MapReduce) Run() (resp [][]byte, err error)
- type Model
- func (m *Model) Delete() (err error)
- func (m *Model) GetSiblings(dest interface{}) (err error)
- func (m Model) Key() (key string)
- func (m *Model) Reload() (err error)
- func (*Model) Resolve(count int) (err error)
- func (m *Model) Save() (err error)
- func (m *Model) SaveAs(newKey string) (err error)
- func (m Model) SetKey(newKey string) (err error)
- type One
- type RObject
- type Resolver
- type Sibling
Constants ¶
This section is empty.
Variables ¶
var ( R1 = map[string]uint32{"r": 1} PR1 = map[string]uint32{"pr": 1} W1 = map[string]uint32{"w": 1} DW1 = map[string]uint32{"dw": 1} PW1 = map[string]uint32{"pw": 1} )
Options for storing and retrieving data, only a few are defined, different values can be supplied by creating a map in the application, for example:
bucket.Get("key", map[string]int{"r":2})
var ( BadNumberOfConnections = errors.New("Connection count <= 0") BadResponseLength = errors.New("Response length too short") )
Error definitions
var ( ResolveNotImplemented = errors.New("Resolve not implemented") DestinationError = errors.New("Destination is not a pointer (to a struct)") DestinationIsNotModel = errors.New("Destination has no riak.Model field") DestinationIsNotSlice = errors.New("Must supply a slice to GetSiblings") DestinationLengthError = errors.New("Length of slice does not match number of siblings") DestinationNotInitialized = errors.New("Destination struct is not initialized (correctly) using riak.New or riak.Load") ModelNotNew = errors.New("Destination struct already has an instantiated riak.Model (this struct is probably not new)") NoSiblingData = errors.New("No non-empty sibling data") )
Error definitions
var (
NotFound = errors.New("Object not found")
)
Error definitions
Functions ¶
Types ¶
type Bucket ¶
type Bucket struct {
// contains filtered or unexported fields
}
Implements access to a bucket and its properties
func (*Bucket) IndexQuery ¶
Return a list of keys using the index for a single key
func (*Bucket) IndexQueryRange ¶
Return a list of keys using the index range query
func (*Bucket) SetAllowMult ¶
Set the allowMult property of a bucket
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
riak.Client the client interface
func (*Client) CounterGet ¶
func (*Client) CounterUpdate ¶
func (*Client) Load ¶
func (c *Client) Load(bucketname string, key string, dest Resolver, options ...map[string]uint32) (err error)
The Load function retrieves the data from Riak and stores it in the struct that is passed as destination. It stores some necessary information in the riak.Model field so it can be used later in other (Save) operations.
Unfortunately you also need to pass the bucketname as it is probably different from the struct name.
Using the "Device" struct as an example:
dev := &Device{} err := client.Load("devices", "12345", dev)
func (*Client) New ¶
func (c *Client) New(bucketname string, key string, dest Resolver, options ...map[string]uint32) (err error)
Create a new Document Model, passing in the bucketname and key. The key can be empty in which case Riak will pick a key. The destination must be a pointer to a struct that has the riak.Model field.
func (*Client) RunMapReduce ¶
Run a MapReduce query
func (*Client) SaveAs ¶
Save a Document Model to Riak under a new key, if empty a Key will be choosen by Riak
func (*Client) ServerVersion ¶
Get the server version
type MapReduce ¶
type MapReduce struct {
// contains filtered or unexported fields
}
An object to build a MapReduce job similar to how the Ruby client can build it by adding different stages.
func (*MapReduce) LinkBucket ¶
func (*MapReduce) MapObjectValue ¶
type Model ¶
type Model struct {
// contains filtered or unexported fields
}
Make structs work like a Document Model, similar to how the Ruby based "ripple" gem works. This is done by parsing the JSON data and mapping it to the struct's fields. To enable easy integration with Ruby/ripple projects the struct "tag" feature of Go is used to possibly get around the naming convention differences between Go and Ruby (Uppercase starting letter required for export and typically CamelCase versus underscores). Also it stores the model/struct name as _type in Riak.
For example the following Ruby/Ripple class:
class Device include Ripple::Document property :ip, String property :description, String property :download_enabled, Boolean end
can be mapped to the following Go class:
type Device struct { Download_enabled bool `riak:"download_enabled"` Ip string `riak:"ip"` Description string `riak:"description"` riak.Model }
Note that it is required to have a riak.Model field. Also if the field name in Ripple is equal the extra tag is not needed, (e.g. if the Ripple class above would have a "property :Ip, String").
func (*Model) GetSiblings ¶
type RObject ¶
type RObject struct { Bucket *Bucket Vclock []byte Key string ContentType string Data []byte Links []Link Meta map[string]string Indexes map[string]string Siblings []Sibling Options []map[string]uint32 // contains filtered or unexported fields }
An RObject is an object or document that is or can be stored in Riak
func (*RObject) AddLink ¶
Add a link if it is not already in the Links slics, returns false if already present
func (*RObject) Conflict ¶
Returns true if the object was fetched with multiple siblings (AllowMult=true on the bucket)
func (*RObject) LinkTo ¶
Add a link to another object (does not store the object, must explicitly call "Store()")