本文整理汇总了Golang中github.com/Terry-Mao/bfs/store/volume.Volume.StartCompact方法的典型用法代码示例。如果您正苦于以下问题:Golang Volume.StartCompact方法的具体用法?Golang Volume.StartCompact怎么用?Golang Volume.StartCompact使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/Terry-Mao/bfs/store/volume.Volume
的用法示例。
在下文中一共展示了Volume.StartCompact方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: CompactVolume
// CompactVolume compact a super block to another file.
func (s *Store) CompactVolume(id int32) (err error) {
var (
v, nv *volume.Volume
bdir, idir string
)
// try check volume
if v = s.Volumes[id]; v != nil {
if v.Compact {
return errors.ErrVolumeInCompact
}
} else {
return errors.ErrVolumeExist
}
// find a free volume
if nv, err = s.freeVolume(id); err != nil {
return
}
// no lock here, Compact is no side-effect
if err = v.StartCompact(nv); err != nil {
v.StopCompact(nil)
return
}
s.vlock.Lock()
if v = s.Volumes[id]; v != nil {
if err = v.StopCompact(nv); err == nil {
// WARN no need update volumes map, use same object, only update
// zookeeper the local index cause the block and index file changed.
if err = s.saveVolumeIndex(); err == nil {
err = s.zk.SetVolume(v)
}
}
} else {
err = errors.ErrVolumeExist
}
s.vlock.Unlock()
if err == nil {
// nv now has old block/index
nv.Close()
nv.Destroy()
bdir, idir = filepath.Dir(nv.Block.File), filepath.Dir(nv.Indexer.File)
_, err = s.AddFreeVolume(1, bdir, idir)
}
return
}