[#487] Optimize bucketInfo in initObjectPayloadReader

Signed-off-by: Angira Kekteeva <kira@nspcc.ru>
This commit is contained in:
Angira Kekteeva 2022-06-02 20:56:04 +04:00 committed by Alex Vanin
parent 4767eeed8c
commit e904ed51c7
7 changed files with 15 additions and 7 deletions

View file

@ -102,6 +102,7 @@ func (h *handler) CopyObjectHandler(w http.ResponseWriter, r *http.Request) {
params := &layer.CopyObjectParams{ params := &layer.CopyObjectParams{
SrcObject: info, SrcObject: info,
ScrBktInfo: p.BktInfo,
DstBktInfo: dstBktInfo, DstBktInfo: dstBktInfo,
DstObject: reqInfo.ObjectName, DstObject: reqInfo.ObjectName,
SrcSize: info.Size, SrcSize: info.Size,

View file

@ -164,6 +164,7 @@ func (h *handler) GetObjectHandler(w http.ResponseWriter, r *http.Request) {
ObjectInfo: info, ObjectInfo: info,
Writer: w, Writer: w,
Range: params, Range: params,
BucketInfo: bktInfo,
} }
if err = h.obj.GetObject(r.Context(), getParams); err != nil { if err = h.obj.GetObject(r.Context(), getParams); err != nil {
h.logAndSendError(w, "could not get object", reqInfo, err) h.logAndSendError(w, "could not get object", reqInfo, err)

View file

@ -74,6 +74,7 @@ func (h *handler) HeadObjectHandler(w http.ResponseWriter, r *http.Request) {
ObjectInfo: info, ObjectInfo: info,
Writer: buffer, Writer: buffer,
Range: getRangeToDetectContentType(info.Size), Range: getRangeToDetectContentType(info.Size),
BucketInfo: bktInfo,
} }
if err = h.obj.GetObject(r.Context(), getParams); err != nil { if err = h.obj.GetObject(r.Context(), getParams); err != nil {
h.logAndSendError(w, "could not get object", reqInfo, err, zap.Stringer("oid", info.ID)) h.logAndSendError(w, "could not get object", reqInfo, err, zap.Stringer("oid", info.ID))

View file

@ -316,6 +316,7 @@ func (h *handler) UploadPartCopy(w http.ResponseWriter, r *http.Request) {
Key: reqInfo.ObjectName, Key: reqInfo.ObjectName,
}, },
SrcObjInfo: srcInfo, SrcObjInfo: srcInfo,
SrcBktInfo: srcBktInfo,
PartNumber: partNumber, PartNumber: partNumber,
Range: srcRange, Range: srcRange,
} }
@ -380,6 +381,7 @@ func (h *handler) CompleteMultipartUploadHandler(w http.ResponseWriter, r *http.
p := &layer.GetObjectParams{ p := &layer.GetObjectParams{
ObjectInfo: initPart, ObjectInfo: initPart,
Writer: initPartPayload, Writer: initPartPayload,
BucketInfo: bktInfo,
} }
if err = h.obj.GetObject(r.Context(), p); err != nil { if err = h.obj.GetObject(r.Context(), p); err != nil {
h.logAndSendError(w, "could not get multipart upload acl and/or tagging", reqInfo, err, additional...) h.logAndSendError(w, "could not get multipart upload acl and/or tagging", reqInfo, err, additional...)

View file

@ -78,6 +78,7 @@ type (
GetObjectParams struct { GetObjectParams struct {
Range *RangeParams Range *RangeParams
ObjectInfo *data.ObjectInfo ObjectInfo *data.ObjectInfo
BucketInfo *data.BucketInfo
Writer io.Writer Writer io.Writer
} }
@ -125,6 +126,7 @@ type (
// CopyObjectParams stores object copy request parameters. // CopyObjectParams stores object copy request parameters.
CopyObjectParams struct { CopyObjectParams struct {
SrcObject *data.ObjectInfo SrcObject *data.ObjectInfo
ScrBktInfo *data.BucketInfo
DstBktInfo *data.BucketInfo DstBktInfo *data.BucketInfo
DstObject string DstObject string
SrcSize int64 SrcSize int64
@ -382,6 +384,7 @@ func (n *layer) GetObject(ctx context.Context, p *GetObjectParams) error {
var params getParams var params getParams
params.objInfo = p.ObjectInfo params.objInfo = p.ObjectInfo
params.bktInfo = p.BucketInfo
if p.Range != nil { if p.Range != nil {
if p.Range.Start > p.Range.End { if p.Range.Start > p.Range.End {
@ -517,6 +520,7 @@ func (n *layer) CopyObject(ctx context.Context, p *CopyObjectParams) (*data.Obje
ObjectInfo: p.SrcObject, ObjectInfo: p.SrcObject,
Writer: pw, Writer: pw,
Range: p.Range, Range: p.Range,
BucketInfo: p.ScrBktInfo,
}) })
if err = pw.CloseWithError(err); err != nil { if err = pw.CloseWithError(err); err != nil {

View file

@ -52,6 +52,7 @@ type (
UploadCopyParams struct { UploadCopyParams struct {
Info *UploadInfoParams Info *UploadInfoParams
SrcObjInfo *data.ObjectInfo SrcObjInfo *data.ObjectInfo
SrcBktInfo *data.BucketInfo
PartNumber int PartNumber int
Range *RangeParams Range *RangeParams
} }
@ -167,6 +168,7 @@ func (n *layer) UploadPartCopy(ctx context.Context, p *UploadCopyParams) (*data.
ObjectInfo: p.SrcObjInfo, ObjectInfo: p.SrcObjInfo,
Writer: pw, Writer: pw,
Range: p.Range, Range: p.Range,
BucketInfo: p.SrcBktInfo,
}) })
if err = pw.CloseWithError(err); err != nil { if err = pw.CloseWithError(err); err != nil {
@ -307,6 +309,8 @@ func (n *layer) CompleteMultipartUpload(ctx context.Context, p *CompleteMultipar
parts: parts, parts: parts,
} }
r.prm.bktInfo = p.Info.Bkt
obj, err = n.PutObject(ctx, &PutObjectParams{ obj, err = n.PutObject(ctx, &PutObjectParams{
BktInfo: p.Info.Bkt, BktInfo: p.Info.Bkt,
Object: p.Info.Key, Object: p.Info.Key,

View file

@ -36,6 +36,7 @@ type (
off, ln uint64 off, ln uint64
objInfo *data.ObjectInfo objInfo *data.ObjectInfo
bktInfo *data.BucketInfo
} }
// ListObjectsParamsCommon contains common parameters for ListObjectsV1 and ListObjectsV2. // ListObjectsParamsCommon contains common parameters for ListObjectsV1 and ListObjectsV2.
@ -126,13 +127,7 @@ func (n *layer) initObjectPayloadReader(ctx context.Context, p getParams) (io.Re
PayloadRange: [2]uint64{p.off, p.ln}, PayloadRange: [2]uint64{p.off, p.ln},
} }
// should be taken from cache n.prepareAuthParameters(ctx, &prm.PrmAuth, p.bktInfo.Owner)
bktInfo, err := n.GetBucketInfo(ctx, p.objInfo.Bucket)
if err != nil {
return nil, err
}
n.prepareAuthParameters(ctx, &prm.PrmAuth, bktInfo.Owner)
res, err := n.neoFS.ReadObject(ctx, prm) res, err := n.neoFS.ReadObject(ctx, prm)
if err != nil { if err != nil {