[#1120] objectSvc: Fix EC put placement

Use parent object ID to compute placement.
Fix too many copies saving.

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
Dmitrii Stepanov 2024-05-03 17:20:41 +03:00
parent 5c730de96e
commit ada1b9f737

View file

@ -147,7 +147,7 @@ func (e *ecWriter) relayToContainerNode(ctx context.Context) error {
} }
func (e *ecWriter) writeECPart(ctx context.Context, obj *objectSDK.Object) error { func (e *ecWriter) writeECPart(ctx context.Context, obj *objectSDK.Object) error {
t, err := placement.NewTraverser(e.placementOpts...) t, err := placement.NewTraverser(append(e.placementOpts, placement.ForObject(obj.ECHeader().Parent()))...)
if err != nil { if err != nil {
return err return err
} }
@ -162,6 +162,7 @@ func (e *ecWriter) writeECPart(ctx context.Context, obj *objectSDK.Object) error
eg.Go(func() error { eg.Go(func() error {
return e.writePart(egCtx, obj, int(obj.ECHeader().Index()), nodes) return e.writePart(egCtx, obj, int(obj.ECHeader().Index()), nodes)
}) })
t.SubmitSuccess()
} }
if err := eg.Wait(); err != nil { if err := eg.Wait(); err != nil {
return errIncompletePut{ return errIncompletePut{
@ -181,7 +182,8 @@ func (e *ecWriter) writeRawObject(ctx context.Context, obj *objectSDK.Object) er
if err != nil { if err != nil {
return err return err
} }
t, err := placement.NewTraverser(e.placementOpts...) objID, _ := obj.ID()
t, err := placement.NewTraverser(append(e.placementOpts, placement.ForObject(objID))...)
if err != nil { if err != nil {
return err return err
} }
@ -198,6 +200,7 @@ func (e *ecWriter) writeRawObject(ctx context.Context, obj *objectSDK.Object) er
eg.Go(func() error { eg.Go(func() error {
return e.writePart(egCtx, parts[idx], idx, nodes) return e.writePart(egCtx, parts[idx], idx, nodes)
}) })
t.SubmitSuccess()
} }
} }
if err := eg.Wait(); err != nil { if err := eg.Wait(); err != nil {