Handle nasty race condition when putting tombstone #1435

Merged
dstepanov-yadro merged 1 commit from fyrchik/frostfs-node:fix-gc into master 2024-10-26 11:30:27 +00:00

View file

@ -32,6 +32,10 @@ type LocalTarget struct {
} }
func (t LocalTarget) WriteObject(ctx context.Context, obj *objectSDK.Object, meta objectCore.ContentMeta) error { func (t LocalTarget) WriteObject(ctx context.Context, obj *objectSDK.Object, meta objectCore.ContentMeta) error {
if err := t.Storage.Put(ctx, obj, containerCore.IsIndexedContainer(t.Container)); err != nil {
return fmt.Errorf("(%T) could not put object to local storage: %w", t, err)
}
switch meta.Type() { switch meta.Type() {
case objectSDK.TypeTombstone: case objectSDK.TypeTombstone:
err := t.Storage.Delete(ctx, objectCore.AddressOf(obj), meta.Objects()) err := t.Storage.Delete(ctx, objectCore.AddressOf(obj), meta.Objects())
@ -47,8 +51,5 @@ func (t LocalTarget) WriteObject(ctx context.Context, obj *objectSDK.Object, met
// objects that do not change meta storage // objects that do not change meta storage
} }
if err := t.Storage.Put(ctx, obj, containerCore.IsIndexedContainer(t.Container)); err != nil {
return fmt.Errorf("(%T) could not put object to local storage: %w", t, err)
}
return nil return nil
} }