Store删除

Volume.Delete
// del signal the godel goroutine aync merge all offsets and del.
func (v *Volume) del(offset uint32) (err error) {
if offset == needle.CacheDelOffset {
return
}
select {
case v.ch <- offset:
default:
log.Errorf("volume: %d send signal failed", v.Id)
err = errors.ErrVolumeDel
}
return
}
// Delete logical delete a needle, update disk needle flag and memory needle
// cache offset to zero.
func (v *Volume) Delete(key int64) (err error) {
var (
ok bool
nc int64
size int32
offset uint32
)
v.lock.Lock()
if nc, ok = v.needles[key]; ok {
if offset, size = needle.Cache(nc); offset != needle.CacheDelOffset {
v.needles[key] = needle.NewCache(needle.CacheDelOffset, size)
// when in compact, must save all del operations.
if v.Compact {
v.compactKeys = append(v.compactKeys, key)
}
} else {
err = errors.ErrNeedleDeleted
}
} else {
err = errors.ErrNeedleNotExist
}
v.lock.Unlock()
if err == nil {
err = v.del(offset)
}
return
}