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
}

results matching ""

    No results matching ""