[#1421] metabase: Use LockPrm to store Lock operation parameters

Refactor `Lock` method to use `LockPrm` and `LockRes` structures
to store operation parameters and results, respectively.

Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
This commit is contained in:
Aleksey Savchuk 2024-12-11 15:46:07 +03:00
parent 3821645085
commit 0b7860100f
Signed by: a-savchuk
GPG key ID: 70C0A7FF6F9C4639
7 changed files with 77 additions and 20 deletions

View file

@ -23,9 +23,12 @@ func TestDB_Lock(t *testing.T) {
db := newDB(t)
defer func() { require.NoError(t, db.Close(context.Background())) }()
var lockPrm meta.LockPrm
lockPrm.SetContainer(cnr)
t.Run("empty locked list", func(t *testing.T) {
require.Panics(t, func() { _ = db.Lock(context.Background(), cnr, oid.ID{}, nil) })
require.Panics(t, func() { _ = db.Lock(context.Background(), cnr, oid.ID{}, []oid.ID{}) })
lockPrm.SetTarget(oid.ID{})
require.Panics(t, func() { _, _ = db.Lock(context.Background(), lockPrm) })
})
t.Run("(ir)regular", func(t *testing.T) {
@ -47,7 +50,8 @@ func TestDB_Lock(t *testing.T) {
id, _ := obj.ID()
// try to lock it
err = db.Lock(context.Background(), cnr, oidtest.ID(), []oid.ID{id})
lockPrm.SetTarget(oidtest.ID(), id)
_, err = db.Lock(context.Background(), lockPrm)
if typ == objectSDK.TypeRegular {
require.NoError(t, err, typ)
} else {
@ -198,7 +202,12 @@ func TestDB_Lock_Expired(t *testing.T) {
require.ErrorIs(t, err, meta.ErrObjectIsExpired)
// lock the obj
require.NoError(t, db.Lock(context.Background(), addr.Container(), oidtest.ID(), []oid.ID{addr.Object()}))
var lockPrm meta.LockPrm
lockPrm.SetContainer(addr.Container())
lockPrm.SetTarget(oidtest.ID(), addr.Object())
_, err = db.Lock(context.Background(), lockPrm)
require.NoError(t, err)
// object is expired but locked, thus, must be available
_, err = metaGet(db, addr, false)
@ -277,7 +286,11 @@ func putAndLockObj(t *testing.T, db *meta.DB, numOfLockedObjs int) ([]*objectSDK
err := putBig(db, lockObj)
require.NoError(t, err)
err = db.Lock(context.Background(), cnr, lockID, lockedObjIDs)
var lockPrm meta.LockPrm
lockPrm.SetContainer(cnr)
lockPrm.SetTarget(lockID, lockedObjIDs...)
_, err = db.Lock(context.Background(), lockPrm)
require.NoError(t, err)
return lockedObjs, lockObj