Documentation ¶
Overview ¶
Package couchbase provides a smart client for go.
Usage:
client, err := couchbase.Connect("http://myserver:8091/") handleError(err) pool, err := client.GetPool("default") handleError(err) bucket, err := pool.GetBucket("MyAwesomeBucket") handleError(err) ...
or a shortcut for the bucket directly
bucket, err := couchbase.GetBucket("http://myserver:8091/", "default", "default")
in any case, you can specify authentication credentials using standard URL userinfo syntax:
b, err := couchbase.GetBucket("http://bucketname:bucketpass@myserver:8091/", "default", "bucket")
Index ¶
- Constants
- Variables
- func CleanupHost(h, commonSuffix string) string
- func FindCommonSuffix(input []string) string
- func IsKeyEExistsError(err error) bool
- func IsKeyNoEntError(err error) bool
- func ParseURL(urlStr string) (result *url.URL, err error)
- func SetConnectionPoolParams(size, overflow int)
- func SetTcpKeepalive(enabled bool, interval int)
- func SetViewUpdateParams(baseU string, params map[string]interface{}) (viewOpts map[string]interface{}, err error)
- type AuthHandler
- type Bucket
- func (b *Bucket) Add(k string, exp int, v interface{}) (added bool, err error)
- func (b *Bucket) AddRaw(k string, exp int, v []byte) (added bool, err error)
- func (b *Bucket) Append(k string, data []byte) error
- func (b *Bucket) Cas(k string, exp int, cas uint64, v interface{}) error
- func (b *Bucket) CasRaw(k string, exp int, cas uint64, v interface{}) error
- func (b *Bucket) CasWithMeta(k string, flags int, exp int, cas uint64, v interface{}) error
- func (b *Bucket) Close()
- func (b Bucket) CommonAddressSuffix() string
- func (b *Bucket) Delete(k string) error
- func (b *Bucket) DeleteDDoc(docname string) error
- func (b *Bucket) Do(k string, f func(mc *memcached.Client, vb uint16) error) (err error)
- func (b *Bucket) Get(k string, rv interface{}) error
- func (b *Bucket) GetBulk(keys []string) (map[string]*gomemcached.MCResponse, error)
- func (b *Bucket) GetBulkRaw(keys []string) (map[string][]byte, error)
- func (b *Bucket) GetDDoc(docname string, into interface{}) error
- func (b *Bucket) GetDDocWithRetry(docname string, into interface{}) error
- func (b *Bucket) GetDDocs() (DDocsResult, error)
- func (b *Bucket) GetDDocsWithRetry() (DDocsResult, error)
- func (b *Bucket) GetFailoverLogs(vBuckets []uint16) (FailoverLog, error)
- func (b *Bucket) GetPool() *Pool
- func (b *Bucket) GetRaw(k string) ([]byte, error)
- func (b *Bucket) GetStats(which string) map[string]map[string]string
- func (b *Bucket) GetVBmap(addrs []string) (map[string][]uint16, error)
- func (b *Bucket) Gets(k string, rv interface{}, caso *uint64) error
- func (b *Bucket) GetsRaw(k string) (data []byte, flags int, cas uint64, err error)
- func (b Bucket) HealthyNodes() []Node
- func (b *Bucket) Incr(k string, amt, def uint64, exp int) (val uint64, err error)
- func (b Bucket) NodeAddresses() []string
- func (b Bucket) Nodes() []Node
- func (b *Bucket) Observe(k string) (result memcached.ObserveResult, err error)
- func (b *Bucket) PutDDoc(docname string, value interface{}) error
- func (b *Bucket) Refresh() error
- func (b *Bucket) RunBucketUpdater(notify NotifyFn)
- func (b *Bucket) Set(k string, exp int, v interface{}) error
- func (b *Bucket) SetRaw(k string, exp int, v []byte) error
- func (b *Bucket) SetWithMeta(k string, flags int, exp int, v interface{}) error
- func (b *Bucket) StartTapFeed(args *memcached.TapArguments) (*TapFeed, error)
- func (b *Bucket) StartUprFeed(name string, sequence uint32) (*UprFeed, error)
- func (b *Bucket) StartUprFeedWithConfig(name string, sequence uint32, data_chan_size int, dcp_buffer_size uint32) (*UprFeed, error)
- func (b *Bucket) Update(k string, exp int, callback UpdateFunc) error
- func (b *Bucket) UpdateBucket() error
- func (b *Bucket) VBHash(key string) uint32
- func (b *Bucket) VBServerMap() *VBucketServerMap
- func (b *Bucket) View(ddoc, name string, params map[string]interface{}) (ViewResult, error)
- func (b *Bucket) ViewCustom(ddoc, name string, params map[string]interface{}, vres interface{}) (err error)
- func (b *Bucket) ViewURL(ddoc, name string, params map[string]interface{}) (string, error)
- func (b *Bucket) WaitForPersistence(k string, cas uint64, deletion bool) error
- func (b *Bucket) Write(k string, flags, exp int, v interface{}, opt WriteOptions) (err error)
- func (b *Bucket) WriteCas(k string, flags, exp int, cas uint64, v interface{}, opt WriteOptions) (err error)
- func (b *Bucket) WriteUpdate(k string, exp int, callback WriteUpdateFunc) error
- type BucketAuth
- type BucketInfo
- type Client
- type DDoc
- type DDocsResult
- type DocID
- type FailoverLog
- type FeedInfo
- type GenericMcdAuthHandler
- type HTTPAuthHandler
- type MultiBucketAuthHandler
- type Node
- type NodeServices
- type NotifyFn
- type Pool
- type PoolServices
- type Pools
- type RestPool
- type TapFeed
- type UpdateFunc
- type UprFeed
- type VBucketServerMap
- type ViewDefinition
- type ViewError
- type ViewResult
- type ViewRow
- type WriteOptions
- type WriteUpdateFunc
Constants ¶
const ( // Raw specifies that the value is raw []byte or nil; don't // JSON-encode it. Raw = WriteOptions(1 << iota) // AddOnly indicates an item should only be written if it // doesn't exist, otherwise ErrKeyExists is returned. AddOnly // Persist causes the operation to block until the server // confirms the item is persisted. Persist // Indexable causes the operation to block until it's availble via the index. Indexable // Append indicates the given value should be appended to the // existing value for the given key. Append )
const ABS_MAX_RETRIES = 10
const ABS_MIN_RETRIES = 3
const DEFAULT_WINDOW_SIZE = 20 * 1024 * 1024 // 20 Mb
const DISCONNECT_PERIOD = 120 * time.Second
const HTTP_MAX_RETRY = 5
arbitary number, may need to be tuned #FIXME
const MAX_RETRY_COUNT = 5
const START_NODE_ID = -1
const UpdateCancel = memcached.CASQuit
Return this as the error from an UpdateFunc to cancel the Update operation.
Variables ¶
var ClientOpCallback func(opname, k string, start time.Time, err error)
ClientOpCallback is called for each invocation of Do.
var ConnPoolAvailWaitTime = time.Millisecond
ConnPoolAvailWaitTime is the amount of time to wait for an existing connection from the pool before considering the creation of a new one.
ConnPoolTimeout is notified whenever connections are acquired from a pool.
var ConnPoolTimeout = time.Hour * 24 * 30
Default timeout for retrieving a connection from the pool.
var ErrKeyExists = errors.New("key exists")
Error returned from Write with AddOnly flag, when key already exists in the bucket.
var ErrOverwritten = errors.New("overwritten")
Returned from WaitForPersistence (or Write, if the Persistent or Indexable flag is used) if the value has been overwritten by another before being persisted.
var ErrTimeout = errors.New("timeout")
Returned from WaitForPersistence (or Write, if the Persistent or Indexable flag is used) if the value hasn't been persisted by the timeout interval
var HTTPClient = &http.Client{Transport: HTTPTransport}
var HTTPTransport = &http.Transport{MaxIdleConnsPerHost: MaxIdleConnsPerHost}
var MaxBulkRetries = 5000
Maximum number of times to retry a chunk of a bulk get on error.
var MaxIdleConnsPerHost = 256
HTTPClient to use for REST and view operations.
var PoolOverflow = 16
PoolOverflow is the number of overflow connections allowed in a pool.
var PoolSize = 64
PoolSize is the size of each connection pool (per host).
var SlowServerCallWarningThreshold time.Duration
If this is set to a nonzero duration, Do() and ViewCustom() will log a warning if the call takes longer than that.
var TCPKeepalive = false
TCP KeepAlive enabled/disabled
var TCPKeepaliveInterval = 30 * 60
TCP keepalive interval in seconds. Default 30 minutes
var TimeoutError = errors.New("timeout waiting to build connection")
Error raised when a connection can't be retrieved from a pool.
var ViewCallback func(ddoc, name string, start time.Time, err error)
ViewCallback is called for each view invocation.
Functions ¶
func CleanupHost ¶
CleanupHost returns the hostname with the given suffix removed.
func FindCommonSuffix ¶
FindCommonSuffix returns the longest common suffix from the given strings.
func IsKeyEExistsError ¶
Return true if error is KEY_ENOENT. Required by cbq-engine
func IsKeyNoEntError ¶
Return true if error is KEY_ENOENT. Required by cbq-engine
func SetConnectionPoolParams ¶
func SetConnectionPoolParams(size, overflow int)
Allow applications to speciify the Poolsize and Overflow
func SetTcpKeepalive ¶
Allow TCP keepalive parameters to be set by the application
Types ¶
type AuthHandler ¶
AuthHandler is a callback that gets the auth username and password for the given bucket.
type Bucket ¶
type Bucket struct { sync.Mutex AuthType string `json:"authType"` Capabilities []string `json:"bucketCapabilities"` CapabilitiesVersion string `json:"bucketCapabilitiesVer"` Type string `json:"bucketType"` Name string `json:"name"` NodeLocator string `json:"nodeLocator"` Quota map[string]float64 `json:"quota,omitempty"` Replicas int `json:"replicaNumber"` Password string `json:"saslPassword"` URI string `json:"uri"` StreamingURI string `json:"streamingUri"` LocalRandomKeyURI string `json:"localRandomKeyUri,omitempty"` UUID string `json:"uuid"` DDocs struct { URI string `json:"uri"` } `json:"ddocs,omitempty"` BasicStats map[string]interface{} `json:"basicStats,omitempty"` Controllers map[string]interface{} `json:"controllers,omitempty"` // These are used for JSON IO, but isn't used for processing // since it needs to be swapped out safely. VBSMJson VBucketServerMap `json:"vBucketServerMap"` NodesJSON []Node `json:"nodes"` // contains filtered or unexported fields }
Bucket is the primary entry point for most data operations.
func (*Bucket) Add ¶
Add adds a value to this bucket; like Set except that nothing happens if the key exists. The value will be serialized into a JSON document.
func (*Bucket) AddRaw ¶
AddRaw adds a value to this bucket; like SetRaw except that nothing happens if the key exists. The value will be stored as raw bytes.
func (*Bucket) CasWithMeta ¶
Set a value in this bucket with Cas with flags
func (*Bucket) Close ¶
func (b *Bucket) Close()
Close marks this bucket as no longer needed, closing connections it may have open.
func (Bucket) CommonAddressSuffix ¶
CommonAddressSuffix finds the longest common suffix of all host:port strings in the node list.
func (*Bucket) DeleteDDoc ¶
DeleteDDoc removes a design document.
func (*Bucket) Do ¶
Do executes a function on a memcached connection to the node owning key "k"
Note that this automatically handles transient errors by replaying your function on a "not-my-vbucket" error, so don't assume your command will only be executed only once.
func (*Bucket) Get ¶
Get a value from this bucket. The value is expected to be a JSON stream and will be deserialized into rv.
func (*Bucket) GetBulk ¶
func (b *Bucket) GetBulk(keys []string) (map[string]*gomemcached.MCResponse, error)
GetBulk fetches multiple keys concurrently.
Unlike more convenient GETs, the entire response is returned in the map for each key. Keys that were not found will not be included in the map.
func (*Bucket) GetBulkRaw ¶
Fetches multiple keys concurrently, with []byte values
This is a wrapper around GetBulk which converts all values returned by GetBulk from raw memcached responses into []byte slices.
func (*Bucket) GetDDocWithRetry ¶
func (*Bucket) GetDDocs ¶
func (b *Bucket) GetDDocs() (DDocsResult, error)
GetDDocs lists all design documents
func (*Bucket) GetDDocsWithRetry ¶
func (b *Bucket) GetDDocsWithRetry() (DDocsResult, error)
func (*Bucket) GetFailoverLogs ¶
func (b *Bucket) GetFailoverLogs(vBuckets []uint16) (FailoverLog, error)
GetFailoverLogs, get the failover logs for a set of vbucket ids
func (*Bucket) GetStats ¶
GetStats gets a set of stats from all servers.
Returns a map of server ID -> map of stat key to map value.
func (*Bucket) Gets ¶
Gets gets a value from this bucket, including its CAS counter. The value is expected to be a JSON stream and will be deserialized into rv.
func (*Bucket) GetsRaw ¶
GetsRaw gets a raw value from this bucket including its CAS counter and flags.
func (Bucket) NodeAddresses ¶
NodeAddresses gets the (sorted) list of memcached node addresses (hostname:port).
func (*Bucket) RunBucketUpdater ¶
func (*Bucket) SetWithMeta ¶
Set a value in this bucket with with flags
func (*Bucket) StartTapFeed ¶
StartTapFeed creates and starts a new Tap feed
func (*Bucket) StartUprFeed ¶
func (*Bucket) StartUprFeedWithConfig ¶
func (b *Bucket) StartUprFeedWithConfig(name string, sequence uint32, data_chan_size int, dcp_buffer_size uint32) (*UprFeed, error)
StartUprFeed creates and starts a new Upr feed No data will be sent on the channel unless vbuckets streams are requested
func (*Bucket) Update ¶
func (b *Bucket) Update(k string, exp int, callback UpdateFunc) error
Update performs a Safe update of a document, avoiding conflicts by using CAS.
The callback function will be invoked with the current raw document contents (or nil if the document doesn't exist); it should return the updated raw contents (or nil to delete.) If it decides not to change anything it can return UpdateCancel as the error.
If another writer modifies the document between the get and the set, the callback will be invoked again with the newer value.
func (*Bucket) UpdateBucket ¶
func (*Bucket) VBServerMap ¶
func (b *Bucket) VBServerMap() *VBucketServerMap
VBServerMap returns the current VBucketServerMap.
func (*Bucket) View ¶
func (b *Bucket) View(ddoc, name string, params map[string]interface{}) (ViewResult, error)
View executes a view.
The ddoc parameter is just the bare name of your design doc without the "_design/" prefix.
Parameters are string keys with values that correspond to couchbase view parameters. Primitive should work fairly naturally (booleans, ints, strings, etc...) and other values will attempt to be JSON marshaled (useful for array indexing on on view keys, for example).
Example:
res, err := couchbase.View("myddoc", "myview", map[string]interface{}{ "group_level": 2, "startkey_docid": []interface{}{"thing"}, "endkey_docid": []interface{}{"thing", map[string]string{}}, "stale": false, })
func (*Bucket) ViewCustom ¶
func (b *Bucket) ViewCustom(ddoc, name string, params map[string]interface{}, vres interface{}) (err error)
ViewCustom performs a view request that can map row values to a custom type.
See the source to View for an example usage.
func (*Bucket) ViewURL ¶
ViewURL constructs a URL for a view with the given ddoc, view name, and parameters.
func (*Bucket) WaitForPersistence ¶
WaitForPersistence waits for an item to be considered durable.
Besides transport errors, ErrOverwritten may be returned if the item is overwritten before it reaches durability. ErrTimeout may occur if the item isn't found durable in a reasonable amount of time.
func (*Bucket) Write ¶
func (b *Bucket) Write(k string, flags, exp int, v interface{}, opt WriteOptions) (err error)
General-purpose value setter.
The Set, Add and Delete methods are just wrappers around this. The interpretation of `v` depends on whether the `Raw` option is given. If it is, v must be a byte array or nil. (A nil value causes a delete.) If `Raw` is not given, `v` will be marshaled as JSON before being written. It must be JSON-marshalable and it must not be nil.
func (*Bucket) WriteUpdate ¶
func (b *Bucket) WriteUpdate(k string, exp int, callback WriteUpdateFunc) error
WriteUpdate performs a Safe update of a document, avoiding conflicts by using CAS. WriteUpdate is like Update, except that the callback can return a set of WriteOptions, of which Persist and Indexable are recognized: these cause the call to wait until the document update has been persisted to disk and/or become available to index.
type BucketAuth ¶
type BucketAuth struct {
// contains filtered or unexported fields
}
func (*BucketAuth) GetCredentials ¶
func (ba *BucketAuth) GetCredentials() (string, string, string)
type BucketInfo ¶
func GetBucketList ¶
func GetBucketList(baseU string) (bInfo []BucketInfo, err error)
Get SASL buckets
type Client ¶
A Client is the starting point for all services across all buckets in a Couchbase cluster.
func Connect ¶
Connect to a couchbase cluster. An authentication handler will be created from the userinfo in the URL if provided.
func ConnectWithAuth ¶
func ConnectWithAuth(baseU string, ah AuthHandler) (c Client, err error)
ConnectWithAuth connects to a couchbase cluster with the given authentication handler.
func ConnectWithAuthCreds ¶
ConnectWithAuthCreds connects to a couchbase cluster with the give authorization creds returned by cb_auth
func (*Client) GetPoolServices ¶
func (c *Client) GetPoolServices(name string) (ps PoolServices, err error)
GetPoolServices returns all the bucket-independent services in a pool. (See "Exposing services outside of bucket context" in http://goo.gl/uuXRkV)
type DDoc ¶
type DDoc struct { Language string `json:"language,omitempty"` Views map[string]ViewDefinition `json:"views"` }
DDoc is the document body of a design document specifying a view.
type DDocsResult ¶
type DDocsResult struct { Rows []struct { DDoc struct { Meta map[string]interface{} JSON DDoc } `json:"doc"` } `json:"rows"` }
DDocsResult represents the result from listing the design documents.
type DocID ¶
type DocID string
DocID is the document ID type for the startkey_docid parameter in views.
type FailoverLog ¶
type FailoverLog map[uint16]memcached.FailoverLog
type FeedInfo ¶
type FeedInfo struct {
// contains filtered or unexported fields
}
UprFeed from a single connection
type GenericMcdAuthHandler ¶
type GenericMcdAuthHandler interface { AuthHandler AuthenticateMemcachedConn(host string, conn *memcached.Client) error }
GenericMcdAuthHandler is a kind of AuthHandler that performs special auth exchange (like non-standard auth, possibly followed by select-bucket).
type HTTPAuthHandler ¶
type HTTPAuthHandler interface { AuthHandler SetCredsForRequest(req *http.Request) error }
HTTPAuthHandler is kind of AuthHandler that performs more general for outgoing http requests than is possible via simple GetCredentials() call (i.e. digest auth or different auth per different destinations).
type MultiBucketAuthHandler ¶
type MultiBucketAuthHandler interface { AuthHandler ForBucket(bucket string) AuthHandler }
MultiBucketAuthHandler is kind of AuthHandler that may perform different auth for different buckets.
type Node ¶
type Node struct { ClusterCompatibility int `json:"clusterCompatibility"` ClusterMembership string `json:"clusterMembership"` CouchAPIBase string `json:"couchApiBase"` Hostname string `json:"hostname"` InterestingStats map[string]float64 `json:"interestingStats,omitempty"` MCDMemoryAllocated float64 `json:"mcdMemoryAllocated"` MCDMemoryReserved float64 `json:"mcdMemoryReserved"` MemoryFree float64 `json:"memoryFree"` MemoryTotal float64 `json:"memoryTotal"` OS string `json:"os"` Ports map[string]int `json:"ports"` Status string `json:"status"` Uptime int `json:"uptime,string"` Version string `json:"version"` ThisNode bool `json:"thisNode,omitempty"` }
A Node is a computer in a cluster running the couchbase software.
type NodeServices ¶
type NodeServices struct { Services map[string]int `json:"services,omitempty"` Hostname string `json:"hostname"` ThisNode bool `json:"thisNode"` }
NodeServices is all the bucket-independent services running on a node (given by Hostname)
type Pool ¶
type Pool struct { BucketMap map[string]Bucket Nodes []Node BucketURL map[string]string `json:"buckets"` // contains filtered or unexported fields }
A Pool of nodes and buckets.
func (*Pool) GetBucketWithAuth ¶
GetBucket gets a bucket from within this pool.
type PoolServices ¶
type PoolServices struct { Rev int `json:"rev"` NodesExt []NodeServices `json:"nodesExt"` }
PoolServices is all the bucket-independent services in a pool
type Pools ¶
type Pools struct { ComponentsVersion map[string]string `json:"componentsVersion,omitempty"` ImplementationVersion string `json:"implementationVersion"` IsAdmin bool `json:"isAdminCreds"` UUID string `json:"uuid"` Pools []RestPool `json:"pools"` }
Pools represents the collection of pools as returned from the REST API.
type RestPool ¶
type RestPool struct { Name string `json:"name"` StreamingURI string `json:"streamingUri"` URI string `json:"uri"` }
RestPool represents a single pool returned from the pools REST API.
type TapFeed ¶
type TapFeed struct { C <-chan memcached.TapEvent // contains filtered or unexported fields }
A TapFeed streams mutation events from a bucket.
Events from the bucket can be read from the channel 'C'. Remember to call Close() on it when you're done, unless its channel has closed itself already.
type UpdateFunc ¶
An UpdateFunc is a callback function to update a document
type UprFeed ¶
type UprFeed struct { C <-chan *memcached.UprEvent // contains filtered or unexported fields }
A UprFeed streams mutation events from a bucket.
Events from the bucket can be read from the channel 'C'. Remember to call Close() on it when you're done, unless its channel has closed itself already.
func (*UprFeed) UprCloseStream ¶
UprCloseStream ends a vbucket stream.
type VBucketServerMap ¶
type VBucketServerMap struct { HashAlgorithm string `json:"hashAlgorithm"` NumReplicas int `json:"numReplicas"` ServerList []string `json:"serverList"` VBucketMap [][]int `json:"vBucketMap"` }
VBucketServerMap is the a mapping of vbuckets to nodes.
type ViewDefinition ¶
ViewDefinition represents a single view within a design document.
type ViewError ¶
A ViewError is a node-specific error indicating a partial failure within a view result.
type ViewResult ¶
ViewResult holds the entire result set from a view request, including the rows and the errors.
type ViewRow ¶
type ViewRow struct { ID string Key interface{} Value interface{} Doc *interface{} }
ViewRow represents a single result from a view.
Doc is present only if include_docs was set on the request.
type WriteOptions ¶
type WriteOptions int
WriteOptions is the set of option flags availble for the Write method. They are ORed together to specify the desired request.
func (WriteOptions) String ¶
func (w WriteOptions) String() string
String representation of WriteOptions
type WriteUpdateFunc ¶
type WriteUpdateFunc func(current []byte) (updated []byte, opt WriteOptions, err error)
A WriteUpdateFunc is a callback function to update a document
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package cbdatasource streams data from a Couchbase cluster.
|
Package cbdatasource streams data from a Couchbase cluster. |
examples
|
|
upr_bench
Tool receives raw events from go-couchbase UPR client.
|
Tool receives raw events from go-couchbase UPR client. |
tools
|
|
Package couchbaseutil offers some convenience functions for apps that use couchbase.
|
Package couchbaseutil offers some convenience functions for apps that use couchbase. |