Revert "[#1367] fstree: Add size hint for Delete"

This reverts commit b33559754d.
This commit is contained in:
Dmitrii Stepanov 2025-01-22 11:36:34 +03:00
parent 74e11b3cf3
commit 1fc95f6ed8
Signed by: dstepanov-yadro
GPG key ID: 237AF1A763293BC0
7 changed files with 48 additions and 93 deletions

View file

@ -8,7 +8,6 @@ import (
type DeletePrm struct { type DeletePrm struct {
Address oid.Address Address oid.Address
StorageID []byte StorageID []byte
Size uint64
} }
// DeleteRes groups the resulting values of Delete operation. // DeleteRes groups the resulting values of Delete operation.

View file

@ -338,7 +338,7 @@ func (t *FSTree) Delete(ctx context.Context, prm common.DeletePrm) (common.Delet
} }
p := t.treePath(prm.Address) p := t.treePath(prm.Address)
err = t.writer.removeFile(p, prm.Size) err = t.writer.removeFile(p)
return common.DeleteRes{}, err return common.DeleteRes{}, err
} }

View file

@ -68,70 +68,34 @@ func TestObjectCounter(t *testing.T) {
var delPrm common.DeletePrm var delPrm common.DeletePrm
delPrm.Address = addr delPrm.Address = addr
t.Run("without size hint", func(t *testing.T) { eg, egCtx := errgroup.WithContext(context.Background())
eg, egCtx := errgroup.WithContext(context.Background())
eg.Go(func() error { eg.Go(func() error {
for range 1_000 { for range 1_000 {
_, err := fst.Put(egCtx, putPrm) _, err := fst.Put(egCtx, putPrm)
if err != nil { if err != nil {
return err return err
}
} }
return nil }
}) return nil
eg.Go(func() error {
var le logicerr.Logical
for range 1_000 {
_, err := fst.Delete(egCtx, delPrm)
if err != nil && !errors.As(err, &le) {
return err
}
}
return nil
})
require.NoError(t, eg.Wait())
count, size = counter.CountSize()
realCount, realSize, err := fst.countFiles()
require.NoError(t, err)
require.Equal(t, realCount, count, "real %d, actual %d", realCount, count)
require.Equal(t, realSize, size, "real %d, actual %d", realSize, size)
}) })
t.Run("with size hint", func(t *testing.T) { eg.Go(func() error {
delPrm.Size = uint64(len(putPrm.RawData)) var le logicerr.Logical
eg, egCtx := errgroup.WithContext(context.Background()) for range 1_000 {
_, err := fst.Delete(egCtx, delPrm)
eg.Go(func() error { if err != nil && !errors.As(err, &le) {
for range 1_000 { return err
_, err := fst.Put(egCtx, putPrm)
if err != nil {
return err
}
} }
return nil }
}) return nil
eg.Go(func() error {
var le logicerr.Logical
for range 1_000 {
_, err := fst.Delete(egCtx, delPrm)
if err != nil && !errors.As(err, &le) {
return err
}
}
return nil
})
require.NoError(t, eg.Wait())
count, size = counter.CountSize()
realCount, realSize, err := fst.countFiles()
require.NoError(t, err)
require.Equal(t, realCount, count, "real %d, actual %d", realCount, count)
require.Equal(t, realSize, size, "real %d, actual %d", realSize, size)
}) })
require.NoError(t, eg.Wait())
count, size = counter.CountSize()
realCount, realSize, err := fst.countFiles()
require.NoError(t, err)
require.Equal(t, realCount, count, "real %d, actual %d", realCount, count)
require.Equal(t, realSize, size, "real %d, actual %d", realSize, size)
} }

View file

@ -16,7 +16,7 @@ import (
type writer interface { type writer interface {
writeData(string, []byte) error writeData(string, []byte) error
removeFile(string, uint64) error removeFile(string) error
} }
type genericWriter struct { type genericWriter struct {
@ -107,10 +107,10 @@ func (w *genericWriter) writeFile(p string, data []byte) error {
return err return err
} }
func (w *genericWriter) removeFile(p string, size uint64) error { func (w *genericWriter) removeFile(p string) error {
var err error var err error
if w.fileCounterEnabled { if w.fileCounterEnabled {
err = w.removeWithCounter(p, size) err = w.removeWithCounter(p)
} else { } else {
err = os.Remove(p) err = os.Remove(p)
} }
@ -121,21 +121,18 @@ func (w *genericWriter) removeFile(p string, size uint64) error {
return err return err
} }
func (w *genericWriter) removeWithCounter(p string, size uint64) error { func (w *genericWriter) removeWithCounter(p string) error {
w.fileGuard.Lock(p) w.fileGuard.Lock(p)
defer w.fileGuard.Unlock(p) defer w.fileGuard.Unlock(p)
if size == 0 { stat, err := os.Stat(p)
stat, err := os.Stat(p) if err != nil {
if err != nil { return err
return err
}
size = uint64(stat.Size())
} }
if err := os.Remove(p); err != nil { if err := os.Remove(p); err != nil {
return err return err
} }
w.fileCounter.Dec(uint64(size)) w.fileCounter.Dec(uint64(stat.Size()))
return nil return nil
} }

View file

@ -91,30 +91,25 @@ func (w *linuxWriter) writeFile(p string, data []byte) error {
return errClose return errClose
} }
func (w *linuxWriter) removeFile(p string, size uint64) error { func (w *linuxWriter) removeFile(p string) error {
if w.fileCounterEnabled { if w.fileCounterEnabled {
w.fileGuard.Lock(p) w.fileGuard.Lock(p)
defer w.fileGuard.Unlock(p) defer w.fileGuard.Unlock(p)
if size == 0 {
var stat unix.Stat_t
err := unix.Stat(p, &stat)
if err != nil {
if err == unix.ENOENT {
return logicerr.Wrap(new(apistatus.ObjectNotFound))
}
return err
}
size = uint64(stat.Size)
}
} }
var stat unix.Stat_t
err := unix.Unlink(p) err := unix.Stat(p, &stat)
if err != nil {
if err == unix.ENOENT {
return logicerr.Wrap(new(apistatus.ObjectNotFound))
}
return err
}
err = unix.Unlink(p)
if err != nil && err == unix.ENOENT { if err != nil && err == unix.ENOENT {
return logicerr.Wrap(new(apistatus.ObjectNotFound)) return logicerr.Wrap(new(apistatus.ObjectNotFound))
} }
if err == nil { if err == nil {
w.fileCounter.Dec(uint64(size)) w.fileCounter.Dec(uint64(stat.Size))
} }
return err return err
} }

View file

@ -123,7 +123,7 @@ func (c *cache) flushIfAnObjectExistsWorker(ctx context.Context, objInfo objectI
return return
} }
c.deleteFromDisk(ctx, objInfo.addr, uint64(len(res.RawData))) c.deleteFromDisk(ctx, objInfo.addr)
} }
func (c *cache) reportFlushError(ctx context.Context, msg string, addr string, err error) { func (c *cache) reportFlushError(ctx context.Context, msg string, addr string, err error) {
@ -157,7 +157,7 @@ func (c *cache) flushFSTree(ctx context.Context, ignoreErrors bool) error {
return err return err
} }
c.deleteFromDisk(ctx, e.Address, uint64(len(e.ObjectData))) c.deleteFromDisk(ctx, e.Address)
return nil return nil
} }

View file

@ -40,8 +40,8 @@ func (c *cache) openStore(mod mode.ComponentMode) error {
return nil return nil
} }
func (c *cache) deleteFromDisk(ctx context.Context, addr oid.Address, size uint64) { func (c *cache) deleteFromDisk(ctx context.Context, addr oid.Address) {
_, err := c.fsTree.Delete(ctx, common.DeletePrm{Address: addr, Size: size}) _, err := c.fsTree.Delete(ctx, common.DeletePrm{Address: addr})
if err != nil && !client.IsErrObjectNotFound(err) { if err != nil && !client.IsErrObjectNotFound(err) {
c.log.Error(ctx, logs.WritecacheCantRemoveObjectFromWritecache, zap.Error(err)) c.log.Error(ctx, logs.WritecacheCantRemoveObjectFromWritecache, zap.Error(err))
} else if err == nil { } else if err == nil {