[#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
|
Type objectSDK.Type
|
||||||
IsLinkingObject bool
|
IsLinkingObject bool
|
||||||
ECInfo *ECInfo
|
ECInfo *ECInfo
|
||||||
|
IsLocked bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v Info) String() string {
|
func (v Info) String() string {
|
||||||
|
|
|
@ -140,6 +140,7 @@ func (db *DB) listWithCursor(tx *bbolt.Tx, result []objectcore.Info, count int,
|
||||||
var offset []byte
|
var offset []byte
|
||||||
graveyardBkt := tx.Bucket(graveyardBucketName)
|
graveyardBkt := tx.Bucket(graveyardBucketName)
|
||||||
garbageBkt := tx.Bucket(garbageBucketName)
|
garbageBkt := tx.Bucket(garbageBucketName)
|
||||||
|
lockedBkt := tx.Bucket(bucketNameLocked)
|
||||||
|
|
||||||
rawAddr := make([]byte, cidSize, addressKeySize)
|
rawAddr := make([]byte, cidSize, addressKeySize)
|
||||||
|
|
||||||
|
@ -166,8 +167,12 @@ loop:
|
||||||
bkt := tx.Bucket(name)
|
bkt := tx.Bucket(name)
|
||||||
if bkt != nil {
|
if bkt != nil {
|
||||||
copy(rawAddr, cidRaw)
|
copy(rawAddr, cidRaw)
|
||||||
result, offset, cursor, err = selectNFromBucket(bkt, objType, graveyardBkt, garbageBkt, rawAddr, containerID,
|
result, offset, cursor, err = selectNFromBucket(
|
||||||
result, count, cursor, threshold)
|
bkt, objType,
|
||||||
|
graveyardBkt, garbageBkt, lockedBkt,
|
||||||
|
rawAddr, containerID,
|
||||||
|
result, count, cursor, threshold,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -203,9 +208,11 @@ loop:
|
||||||
|
|
||||||
// selectNFromBucket similar to selectAllFromBucket but uses cursor to find
|
// selectNFromBucket similar to selectAllFromBucket but uses cursor to find
|
||||||
// object to start selecting from. Ignores inhumed objects.
|
// 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
|
objType objectSDK.Type, // type of the objects stored in the main bucket
|
||||||
graveyardBkt, garbageBkt *bbolt.Bucket, // cached graveyard buckets
|
graveyardBkt, garbageBkt *bbolt.Bucket, // cached graveyard buckets
|
||||||
|
lockedBkt *bbolt.Bucket, // cached locked bucket
|
||||||
cidRaw []byte, // container ID prefix, optimization
|
cidRaw []byte, // container ID prefix, optimization
|
||||||
cnt cid.ID, // container ID
|
cnt cid.ID, // container ID
|
||||||
to []objectcore.Info, // listing result
|
to []objectcore.Info, // listing result
|
||||||
|
@ -245,6 +252,9 @@ func selectNFromBucket(bkt *bbolt.Bucket, // main bucket
|
||||||
|
|
||||||
var isLinkingObj bool
|
var isLinkingObj bool
|
||||||
var ecInfo *objectcore.ECInfo
|
var ecInfo *objectcore.ECInfo
|
||||||
|
|
||||||
|
var isLocked bool
|
||||||
|
|
||||||
if objType == objectSDK.TypeRegular {
|
if objType == objectSDK.TypeRegular {
|
||||||
var o objectSDK.Object
|
var o objectSDK.Object
|
||||||
if err := o.Unmarshal(v); err != nil {
|
if err := o.Unmarshal(v); err != nil {
|
||||||
|
@ -259,12 +269,22 @@ func selectNFromBucket(bkt *bbolt.Bucket, // main bucket
|
||||||
Total: ecHeader.Total(),
|
Total: ecHeader.Total(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lockedContainerBucket := lockedBkt.Bucket(cidRaw)
|
||||||
|
isLocked = lockedContainerBucket != nil && lockedContainerBucket.Get(k) != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var a oid.Address
|
var a oid.Address
|
||||||
a.SetContainer(cnt)
|
a.SetContainer(cnt)
|
||||||
a.SetObject(obj)
|
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++
|
count++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue