diff --git a/pkg/local_object_storage/shard/lock.go b/pkg/local_object_storage/shard/lock.go new file mode 100644 index 00000000..0ef06458 --- /dev/null +++ b/pkg/local_object_storage/shard/lock.go @@ -0,0 +1,27 @@ +package shard + +import ( + "fmt" + + cid "github.com/nspcc-dev/neofs-sdk-go/container/id" + oid "github.com/nspcc-dev/neofs-sdk-go/object/id" +) + +// Lock marks objects as locked with another object. All objects from the +// specified container. +// +// Allows locking regular objects only (otherwise returns apistatus.IrregularObjectLock). +// +// Locked list should be unique. Panics if it is empty. +func (s *Shard) Lock(idCnr cid.ID, locker oid.ID, locked []oid.ID) error { + if s.GetMode() == ModeReadOnly { + return ErrReadOnlyMode + } + + err := s.metaBase.Lock(idCnr, locker, locked) + if err != nil { + return fmt.Errorf("metabase lock: %w", err) + } + + return nil +}