diff options
Diffstat (limited to 'vendor/github.com/couchbaselabs/go-couchbase/client.go')
-rw-r--r-- | vendor/github.com/couchbaselabs/go-couchbase/client.go | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/vendor/github.com/couchbaselabs/go-couchbase/client.go b/vendor/github.com/couchbaselabs/go-couchbase/client.go index 43c3382960..433b08ff02 100644 --- a/vendor/github.com/couchbaselabs/go-couchbase/client.go +++ b/vendor/github.com/couchbaselabs/go-couchbase/client.go @@ -255,6 +255,26 @@ func (b *Bucket) GetCount(refresh bool) (count int64, err error) { return count, nil } +// Get bucket document size through the bucket stats +func (b *Bucket) GetSize(refresh bool) (size int64, err error) { + if refresh { + b.Refresh() + } + + var sz int64 + for _, gs := range b.GatherStats("") { + if len(gs.Stats) > 0 { + sz, err = strconv.ParseInt(gs.Stats["ep_value_size"], 10, 64) + if err != nil { + return 0, err + } + size += sz + } + } + + return size, nil +} + func isAuthError(err error) bool { estr := err.Error() return strings.Contains(estr, "Auth failure") @@ -980,6 +1000,78 @@ func (b *Bucket) Append(k string, data []byte) error { return b.Write(k, 0, 0, data, Append|Raw) } +func (b *Bucket) GetsMCFromCollection(collUid uint32, key string, reqDeadline time.Time) (*gomemcached.MCResponse, error) { + var err error + var response *gomemcached.MCResponse + + if key == "" { + return nil, nil + } + + if ClientOpCallback != nil { + defer func(t time.Time) { ClientOpCallback("GetsMCFromCollection", key, t, err) }(time.Now()) + } + + err = b.Do2(key, func(mc *memcached.Client, vb uint16) error { + var err1 error + + mc.SetDeadline(getDeadline(reqDeadline, DefaultTimeout)) + _, err1 = mc.SelectBucket(b.Name) + if err1 != nil { + mc.SetDeadline(noDeadline) + return err1 + } + + mc.SetDeadline(getDeadline(reqDeadline, DefaultTimeout)) + response, err1 = mc.GetFromCollection(vb, collUid, key) + if err1 != nil { + mc.SetDeadline(noDeadline) + return err1 + } + + return nil + }, false) + + return response, err +} + +// Returns collectionUid, manifestUid, error. +func (b *Bucket) GetCollectionCID(scope string, collection string, reqDeadline time.Time) (uint32, uint32, error) { + var err error + var response *gomemcached.MCResponse + + if ClientOpCallback != nil { + defer func(t time.Time) { ClientOpCallback("GetCollectionCID", scope+"."+collection, t, err) }(time.Now()) + } + + var key = "DUMMY" // Contact any server. + var manifestUid uint32 + var collUid uint32 + err = b.Do2(key, func(mc *memcached.Client, vb uint16) error { + var err1 error + + mc.SetDeadline(getDeadline(reqDeadline, DefaultTimeout)) + _, err1 = mc.SelectBucket(b.Name) + if err1 != nil { + mc.SetDeadline(noDeadline) + return err1 + } + + response, err1 = mc.CollectionsGetCID(scope, collection) + if err1 != nil { + mc.SetDeadline(noDeadline) + return err1 + } + + manifestUid = binary.BigEndian.Uint32(response.Extras[4:8]) + collUid = binary.BigEndian.Uint32(response.Extras[8:12]) + + return nil + }, false) + + return collUid, manifestUid, err +} + // Get a value straight from Memcached func (b *Bucket) GetsMC(key string, reqDeadline time.Time) (*gomemcached.MCResponse, error) { var err error |