func (b *keyspace) Count() (int64, errors.Error) { var staterr error var totalCount int64 // this is not an ideal implementation. We will change this when // gocouchbase implements a mechanism to detect cluster changes ns := b.namespace.getPool() cbBucket, err := ns.GetBucket(b.Name()) if err != nil { return 0, errors.NewCbKeyspaceNotFoundError(nil, b.Name()) } statsMap := cbBucket.GetStats("") for _, stats := range statsMap { itemCount := stats["curr_items"] count, err := strconv.Atoi(itemCount) if err != nil { staterr = err break } else { totalCount = totalCount + int64(count) } } if staterr == nil { return totalCount, nil } return 0, errors.NewCbKeyspaceCountError(nil, "keyspace "+b.Name()+"Error "+staterr.Error()) }
func newKeyspace(p *namespace, name string) (datastore.Keyspace, errors.Error) { cbNamespace := p.getPool() cbbucket, err := cbNamespace.GetBucket(name) if err != nil { logging.Infof(" keyspace %s not found %v", name, err) // go-couchbase caches the buckets // to be sure no such bucket exists right now // we trigger a refresh p.refresh(true) cbNamespace = p.getPool() // and then check one more time logging.Infof(" Retrying bucket %s", name) cbbucket, err = cbNamespace.GetBucket(name) if err != nil { // really no such bucket exists return nil, errors.NewCbKeyspaceNotFoundError(err, "keyspace "+name) } } if strings.EqualFold(cbbucket.Type, "memcached") { return nil, errors.NewCbBucketTypeNotSupportedError(nil, cbbucket.Type) } rv := &keyspace{ namespace: p, name: name, cbbucket: cbbucket, } // Initialize index providers rv.viewIndexer = newViewIndexer(rv) logging.Infof("Created New Bucket %s", name) //discover existing indexes if ierr := rv.loadIndexes(); ierr != nil { logging.Warnf("Error loading indexes for keyspace %s, Error %v", name, ierr) } var qerr errors.Error rv.gsiIndexer, qerr = gsi.NewGSIIndexer(p.site.URL(), p.Name(), name) if qerr != nil { logging.Warnf("Error loading GSI indexes for keyspace %s. Error %v", name, qerr) } // Create a bucket updater that will keep the couchbase bucket fresh. cbbucket.RunBucketUpdater(p.KeyspaceDeleteCallback) return rv, nil }