[volume.chek.disk] sync of deletions the fix (#3923)

* sync of deletions the fix

* avoid return if only partiallyDeletedNeedles

* refactor sync deletions
This commit is contained in:
Konstantin Lebedev
2022-10-31 08:32:46 +05:00
committed by GitHub
parent 8b9957d461
commit bf8a9d2db1
4 changed files with 55 additions and 15 deletions

View File

@@ -145,8 +145,12 @@ func (cm *MemDb) LoadFromIdx(idxName string) (ret error) {
func (cm *MemDb) LoadFromReaderAt(readerAt io.ReaderAt) (ret error) {
return cm.LoadFilterFromReaderAt(readerAt, true, true)
}
func (cm *MemDb) LoadFilterFromReaderAt(readerAt io.ReaderAt, isFilterOffsetZero bool, isFilterDeleted bool) (ret error) {
return idx.WalkIndexFile(readerAt, 0, func(key NeedleId, offset Offset, size Size) error {
if offset.IsZero() || size.IsDeleted() {
if (isFilterOffsetZero && offset.IsZero()) || (isFilterDeleted && size.IsDeleted()) {
return cm.Delete(key)
}
return cm.Set(key, offset, size)

View File

@@ -34,6 +34,10 @@ func (k NeedleId) String() string {
return strconv.FormatUint(uint64(k), 16)
}
func (k NeedleId) FileId(volumeId uint32) string {
return fmt.Sprintf("%d,%s00000000", volumeId, k.String())
}
func ParseNeedleId(idString string) (NeedleId, error) {
key, err := strconv.ParseUint(idString, 16, 64)
if err != nil {