From 97a7d16f68a446d902a7bcbbc4cffe6d0897e832 Mon Sep 17 00:00:00 2001 From: Angira Kekteeva Date: Thu, 22 Jul 2021 11:57:37 +0300 Subject: [PATCH] [#112] api: Refactor allObjectsParams struct Replaced Bucket (means name) by BucketInfo struct Signed-off-by: Angira Kekteeva --- api/layer/object.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/api/layer/object.go b/api/layer/object.go index e0060570..d61a9242 100644 --- a/api/layer/object.go +++ b/api/layer/object.go @@ -55,7 +55,7 @@ type ( } allObjectParams struct { - Bucket string + Bucket *BucketInfo Delimiter string Prefix string StartAfter string @@ -210,14 +210,19 @@ func (n *layer) ListObjectsV1(ctx context.Context, p *ListObjectsParamsV1) (*Lis var ( err error result ListObjectsInfoV1 + bkt *BucketInfo ) if p.MaxKeys == 0 { return &result, nil } + if bkt, err = n.GetBucketInfo(ctx, p.Bucket); err != nil { + return nil, err + } + allObjects, err := n.listSortedAllObjects(ctx, allObjectParams{ - Bucket: p.Bucket, + Bucket: bkt, Prefix: p.Prefix, Delimiter: p.Delimiter, StartAfter: p.Marker, @@ -252,17 +257,22 @@ func (n *layer) ListObjectsV2(ctx context.Context, p *ListObjectsParamsV2) (*Lis err error result ListObjectsInfoV2 allObjects []*ObjectInfo + bkt *BucketInfo ) if p.MaxKeys == 0 { return &result, nil } + if bkt, err = n.GetBucketInfo(ctx, p.Bucket); err != nil { + return nil, err + } + if p.ContinuationToken != "" { // find cache with continuation token } else { allObjects, err = n.listSortedAllObjects(ctx, allObjectParams{ - Bucket: p.Bucket, + Bucket: bkt, Prefix: p.Prefix, Delimiter: p.Delimiter, StartAfter: p.StartAfter, @@ -292,14 +302,11 @@ func (n *layer) ListObjectsV2(ctx context.Context, p *ListObjectsParamsV2) (*Lis func (n *layer) listSortedAllObjects(ctx context.Context, p allObjectParams) ([]*ObjectInfo, error) { var ( err error - bkt *BucketInfo ids []*object.ID uniqNames = make(map[string]bool) ) - if bkt, err = n.GetBucketInfo(ctx, p.Bucket); err != nil { - return nil, err - } else if ids, err = n.objectSearch(ctx, &findParams{cid: bkt.CID}); err != nil { + if ids, err = n.objectSearch(ctx, &findParams{cid: p.Bucket.CID}); err != nil { return nil, err } @@ -308,14 +315,14 @@ func (n *layer) listSortedAllObjects(ctx context.Context, p allObjectParams) ([] for _, id := range ids { addr := object.NewAddress() addr.SetObjectID(id) - addr.SetContainerID(bkt.CID) + addr.SetContainerID(p.Bucket.CID) meta, err := n.objectHead(ctx, addr) if err != nil { n.log.Warn("could not fetch object meta", zap.Error(err)) continue } - if oi := objectInfoFromMeta(bkt, meta, p.Prefix, p.Delimiter); oi != nil { + if oi := objectInfoFromMeta(p.Bucket, meta, p.Prefix, p.Delimiter); oi != nil { // use only unique dir names if _, ok := uniqNames[oi.Name]; ok { continue