[#1147] node: Implement Lock\Delete
requests for EC object
Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
parent
88b8ddd902
commit
6130650bb6
20 changed files with 371 additions and 66 deletions
|
@ -80,11 +80,29 @@ func (e *StorageEngine) put(ctx context.Context, prm PutPrm) error {
|
|||
|
||||
// In #1146 this check was parallelized, however, it became
|
||||
// much slower on fast machines for 4 shards.
|
||||
_, err := e.exists(ctx, addr)
|
||||
var parent oid.Address
|
||||
if prm.obj.ECHeader() != nil {
|
||||
parent.SetObject(prm.obj.ECHeader().Parent())
|
||||
parent.SetContainer(addr.Container())
|
||||
}
|
||||
existed, locked, err := e.exists(ctx, addr, parent)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !existed && locked {
|
||||
lockers, err := e.GetLocked(ctx, parent)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, locker := range lockers {
|
||||
err = e.lock(ctx, addr.Container(), locker, []oid.ID{addr.Object()})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var shRes putToShardRes
|
||||
e.iterateOverSortedShards(addr, func(_ int, sh hashedShard) (stop bool) {
|
||||
e.mtx.RLock()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue