[#669] Optimize PutLockInfo

Signed-off-by: Alex Vanin <a.vanin@yadro.com>
This commit is contained in:
Alexey Vanin 2022-08-29 14:30:38 +03:00 committed by Alex Vanin
parent e06f6f1c2a
commit 5ffe28a42f
2 changed files with 14 additions and 6 deletions

View file

@ -255,7 +255,7 @@ func (n *layer) PutObject(ctx context.Context, p *PutObjectParams) (*data.Object
}
if p.Lock != nil && (p.Lock.Retention != nil || p.Lock.LegalHold != nil) {
prm := &PutLockInfoParams{
putLockInfoPrms := &PutLockInfoParams{
ObjVersion: &ObjectVersion{
BktInfo: p.BktInfo,
ObjectName: p.Object,
@ -263,9 +263,10 @@ func (n *layer) PutObject(ctx context.Context, p *PutObjectParams) (*data.Object
},
NewLock: p.Lock,
CopiesNumber: p.CopiesNumber,
NodeVersion: newVersion, // provide new version to make one less tree service call in PutLockInfo
}
if err = n.PutLockInfo(ctx, prm); err != nil {
if err = n.PutLockInfo(ctx, putLockInfoPrms); err != nil {
return nil, err
}
}

View file

@ -23,17 +23,24 @@ type PutLockInfoParams struct {
ObjVersion *ObjectVersion
NewLock *data.ObjectLock
CopiesNumber uint32
NodeVersion *data.NodeVersion // optional
}
func (n *layer) PutLockInfo(ctx context.Context, p *PutLockInfoParams) error {
func (n *layer) PutLockInfo(ctx context.Context, p *PutLockInfoParams) (err error) {
var (
cnrID = p.ObjVersion.BktInfo.CID
newLock = p.NewLock
)
versionNode, err := n.getNodeVersion(ctx, p.ObjVersion)
versionNode := p.NodeVersion
// sometimes node version can be provided from executing context
// if value is not provided, make a tree service call
if versionNode == nil {
versionNode, err = n.getNodeVersion(ctx, p.ObjVersion)
if err != nil {
return err
}
}
lockInfo, err := n.treeService.GetLock(ctx, cnrID, versionNode.ID)
if err != nil && !errorsStd.Is(err, ErrNodeNotFound) {