[#1445] metabase: Indicate locked status in ListWithCursor
method
Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
This commit is contained in:
parent
ef4b71550e
commit
85bc336216
2 changed files with 25 additions and 4 deletions
|
@ -20,6 +20,7 @@ type Info struct {
|
|||
Type objectSDK.Type
|
||||
IsLinkingObject bool
|
||||
ECInfo *ECInfo
|
||||
IsLocked bool
|
||||
}
|
||||
|
||||
func (v Info) String() string {
|
||||
|
|
|
@ -140,6 +140,7 @@ func (db *DB) listWithCursor(tx *bbolt.Tx, result []objectcore.Info, count int,
|
|||
var offset []byte
|
||||
graveyardBkt := tx.Bucket(graveyardBucketName)
|
||||
garbageBkt := tx.Bucket(garbageBucketName)
|
||||
lockedBkt := tx.Bucket(bucketNameLocked)
|
||||
|
||||
rawAddr := make([]byte, cidSize, addressKeySize)
|
||||
|
||||
|
@ -166,8 +167,12 @@ loop:
|
|||
bkt := tx.Bucket(name)
|
||||
if bkt != nil {
|
||||
copy(rawAddr, cidRaw)
|
||||
result, offset, cursor, err = selectNFromBucket(bkt, objType, graveyardBkt, garbageBkt, rawAddr, containerID,
|
||||
result, count, cursor, threshold)
|
||||
result, offset, cursor, err = selectNFromBucket(
|
||||
bkt, objType,
|
||||
graveyardBkt, garbageBkt, lockedBkt,
|
||||
rawAddr, containerID,
|
||||
result, count, cursor, threshold,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
@ -203,9 +208,11 @@ loop:
|
|||
|
||||
// selectNFromBucket similar to selectAllFromBucket but uses cursor to find
|
||||
// object to start selecting from. Ignores inhumed objects.
|
||||
func selectNFromBucket(bkt *bbolt.Bucket, // main bucket
|
||||
func selectNFromBucket(
|
||||
bkt *bbolt.Bucket, // main bucket
|
||||
objType objectSDK.Type, // type of the objects stored in the main bucket
|
||||
graveyardBkt, garbageBkt *bbolt.Bucket, // cached graveyard buckets
|
||||
lockedBkt *bbolt.Bucket, // cached locked bucket
|
||||
cidRaw []byte, // container ID prefix, optimization
|
||||
cnt cid.ID, // container ID
|
||||
to []objectcore.Info, // listing result
|
||||
|
@ -245,6 +252,9 @@ func selectNFromBucket(bkt *bbolt.Bucket, // main bucket
|
|||
|
||||
var isLinkingObj bool
|
||||
var ecInfo *objectcore.ECInfo
|
||||
|
||||
var isLocked bool
|
||||
|
||||
if objType == objectSDK.TypeRegular {
|
||||
var o objectSDK.Object
|
||||
if err := o.Unmarshal(v); err != nil {
|
||||
|
@ -259,12 +269,22 @@ func selectNFromBucket(bkt *bbolt.Bucket, // main bucket
|
|||
Total: ecHeader.Total(),
|
||||
}
|
||||
}
|
||||
|
||||
lockedContainerBucket := lockedBkt.Bucket(cidRaw)
|
||||
isLocked = lockedContainerBucket != nil && lockedContainerBucket.Get(k) != nil
|
||||
}
|
||||
|
||||
var a oid.Address
|
||||
a.SetContainer(cnt)
|
||||
a.SetObject(obj)
|
||||
to = append(to, objectcore.Info{Address: a, Type: objType, IsLinkingObject: isLinkingObj, ECInfo: ecInfo})
|
||||
|
||||
to = append(to, objectcore.Info{
|
||||
Address: a,
|
||||
Type: objType,
|
||||
IsLinkingObject: isLinkingObj,
|
||||
ECInfo: ecInfo,
|
||||
IsLocked: isLocked,
|
||||
})
|
||||
count++
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue