本文整理汇总了Golang中github.com/steveyen/gkvlite.Store类的典型用法代码示例。如果您正苦于以下问题:Golang Store类的具体用法?Golang Store怎么用?Golang Store使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Store类的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: copyRemainingColls
func (s *bucketstore) copyRemainingColls(bsf *bucketstorefile,
collRest []string, compactStore *gkvlite.Store, writeEvery int) error {
currSnapshot := bsf.store.Snapshot()
if currSnapshot == nil {
return fmt.Errorf("compact source snapshot failed: %v", bsf.path)
}
defer currSnapshot.Close()
for _, collName := range collRest {
collCurr := currSnapshot.GetCollection(collName)
if collCurr == nil {
return fmt.Errorf("compact rest coll missing: %v, collName: %v",
bsf.path, collName)
}
collNext := compactStore.SetCollection(collName, nil)
if collNext == nil {
return fmt.Errorf("compact rest dest missing: %v, collName: %v",
bsf.path, collName)
}
_, _, err := copyColl(collCurr, collNext, writeEvery)
if err != nil {
return err
}
}
return nil
}
开发者ID:BenLubar,项目名称:cbgb,代码行数:25,代码来源:compact.go
示例2: copyVBucketColls
func (s *bucketstore) copyVBucketColls(bsf *bucketstorefile,
collName string, compactStore *gkvlite.Store, writeEvery int) (
uint16, *gkvlite.Item, error) {
vbidStr := collName[0 : len(collName)-len(COLL_SUFFIX_CHANGES)]
vbid, err := strconv.Atoi(vbidStr)
if err != nil {
return 0, nil, err
}
if vbid < 0 || vbid > MAX_VBID {
return 0, nil, fmt.Errorf("compact vbid out of range: %v, vbid: %v",
bsf.path, vbid)
}
cName := fmt.Sprintf("%v%s", vbid, COLL_SUFFIX_CHANGES)
kName := fmt.Sprintf("%v%s", vbid, COLL_SUFFIX_KEYS)
cDest := compactStore.SetCollection(cName, nil)
kDest := compactStore.SetCollection(kName, nil)
if cDest == nil || kDest == nil {
return 0, nil, fmt.Errorf("compact could not create colls for vbid: %v",
vbid)
}
cCurr := s.coll(cName) // The c prefix in cFooBar means 'changes'.
kCurr := s.coll(kName) // The k prefix in kFooBar means 'keys'.
if cCurr == nil || kCurr == nil {
return 0, nil, fmt.Errorf("compact source colls missing: %v, vbid: %v",
bsf.path, vbid)
}
// Get a consistent snapshot (keys reflect all changes) of the
// keys & changes collections.
ps := s.partitions[uint16(vbid)]
if ps == nil {
return 0, nil, fmt.Errorf("compact missing partition for vbid: %v", vbid)
}
var currSnapshot *gkvlite.Store
ps.mutate(func(key, changes *gkvlite.Collection) {
currSnapshot = bsf.store.Snapshot()
})
if currSnapshot == nil {
return 0, nil, fmt.Errorf("compact source snapshot failed: %v, vbid: %v",
bsf.path, vbid)
}
cCurrSnapshot := currSnapshot.GetCollection(cName)
kCurrSnapshot := currSnapshot.GetCollection(kName)
if cCurrSnapshot == nil || kCurrSnapshot == nil {
return 0, nil, fmt.Errorf("compact missing colls from snapshot: %v, vbid: %v",
bsf.path, vbid)
}
// TODO: Record stats on # changes processed.
_, lastChange, err := copyColl(cCurrSnapshot, cDest, writeEvery)
if err != nil {
return 0, nil, err
}
// TODO: Record stats on # keys processed.
_, _, err = copyColl(kCurrSnapshot, kDest, writeEvery)
if err != nil {
return 0, nil, err
}
return uint16(vbid), lastChange, err
}
开发者ID:scottcagno,项目名称:cbgb,代码行数:58,代码来源:compact.go
示例3: copyDelta
func copyDelta(lastChangeCAS []byte, cName string, kName string,
srcStore *gkvlite.Store, dstStore *gkvlite.Store,
writeEvery int) (numVisits uint64, err error) {
cSrc := srcStore.GetCollection(cName)
cDst := dstStore.GetCollection(cName)
kDst := dstStore.GetCollection(kName)
if cSrc == nil || cDst == nil || kDst == nil {
return 0, fmt.Errorf("compact copyDelta missing colls: %v, %v",
cName, kName)
}
var errVisit error
err = cSrc.VisitItemsAscend(lastChangeCAS, true, func(cItem *gkvlite.Item) bool {
numVisits++
if numVisits <= 1 {
return true
}
if errVisit = cDst.SetItem(cItem); errVisit != nil {
return false
}
// Update the keys index with the latest change.
i := &item{}
if errVisit = i.fromValueBytes(cItem.Val); errVisit != nil {
return false
}
if i.key == nil || len(i.key) <= 0 {
return true // A nil/empty key means a metadata change.
}
if i.isDeletion() {
if _, errVisit = kDst.Delete(i.key); errVisit != nil {
return false
}
} else {
if errVisit = kDst.Set(i.key, cItem.Key); errVisit != nil {
return false
}
}
// Persist to storage as needed.
if writeEvery > 0 && numVisits%uint64(writeEvery) == 0 {
if errVisit = cDst.Write(); errVisit != nil {
return false
}
if errVisit = kDst.Write(); errVisit != nil {
return false
}
}
return true
})
if err != nil {
return 0, err
}
if errVisit != nil {
return 0, errVisit
}
return numVisits, nil
}
开发者ID:scottcagno,项目名称:cbgb,代码行数:58,代码来源:compact.go
示例4: NewPster
func NewPster(dbpath string, errlog *log.Logger) (*SimplePster, error) { // {{{1
var store *gkvlite.Store
file, err := os.OpenFile(dbpath, os.O_RDWR|os.O_CREATE|os.O_SYNC, 0660)
if err != nil {
return nil, err
}
store, err = gkvlite.NewStore(file)
if err != nil {
return nil, err
}
return &SimplePster{
file: file,
store: store,
rlog: store.SetCollection("rlog", nil),
rfields: store.SetCollection("rfields", nil),
err: errlog,
}, nil
}
开发者ID:critiqjo,项目名称:cs733,代码行数:18,代码来源:persister.go
注:本文中的github.com/steveyen/gkvlite.Store类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论