Errors occurred while processing the request. Perhaps some objects are missing
@@ -57,11 +55,11 @@
- {{ $trimmedPrefix := trimPrefix $prefix }}
- {{if $trimmedPrefix }}
+ {{ $parentPrefix := getParent .Prefix }}
+ {{if $parentPrefix }}
- ⮐..
+ ⮐..
|
|
|
diff --git a/tree/tree.go b/tree/tree.go
index 2ee9356..d99e24b 100644
--- a/tree/tree.go
+++ b/tree/tree.go
@@ -7,7 +7,6 @@ import (
"strings"
"git.frostfs.info/TrueCloudLab/frostfs-http-gw/internal/data"
- "git.frostfs.info/TrueCloudLab/frostfs-http-gw/internal/layer"
"git.frostfs.info/TrueCloudLab/frostfs-http-gw/internal/logs"
"git.frostfs.info/TrueCloudLab/frostfs-http-gw/utils"
"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
@@ -52,10 +51,10 @@ type (
var (
// ErrNodeNotFound is returned from ServiceClient in case of not found error.
- ErrNodeNotFound = layer.ErrNodeNotFound
+ ErrNodeNotFound = errors.New("not found")
// ErrNodeAccessDenied is returned from ServiceClient service in case of access denied error.
- ErrNodeAccessDenied = layer.ErrNodeAccessDenied
+ ErrNodeAccessDenied = errors.New("access denied")
)
const (
@@ -259,7 +258,7 @@ func (c *Tree) getSystemNode(ctx context.Context, bktInfo *data.BucketInfo, name
nodes = filterMultipartNodes(nodes)
if len(nodes) == 0 {
- return nil, layer.ErrNodeNotFound
+ return nil, ErrNodeNotFound
}
if len(nodes) != 1 {
c.reqLogger(ctx).Warn(logs.FoundSeveralSystemTreeNodes, zap.String("name", name), logs.TagField(logs.TagExternalStorageTree))
@@ -303,7 +302,7 @@ func getLatestVersionNode(nodes []NodeResponse) (NodeResponse, error) {
}
if targetIndexNode == -1 {
- return nil, fmt.Errorf("latest version: %w", layer.ErrNodeNotFound)
+ return nil, fmt.Errorf("latest version: %w", ErrNodeNotFound)
}
return nodes[targetIndexNode], nil
@@ -324,20 +323,23 @@ func pathFromName(objectName string) []string {
return strings.Split(objectName, separator)
}
-func (c *Tree) GetSubTreeByPrefix(ctx context.Context, bktInfo *data.BucketInfo, prefix string, latestOnly bool) ([]data.NodeInfo, string, error) {
+func (c *Tree) GetSubTreeByPrefix(ctx context.Context, bktInfo *data.BucketInfo, prefix string, latestOnly bool) ([]data.NodeInfo, error) {
ctx, span := tracing.StartSpanFromContext(ctx, "tree.GetSubTreeByPrefix")
defer span.End()
- rootID, tailPrefix, err := c.determinePrefixNode(ctx, bktInfo, versionTree, prefix)
+ rootID, err := c.getPrefixNodeID(ctx, bktInfo, versionTree, strings.Split(prefix, separator))
if err != nil {
- return nil, "", err
+ if errors.Is(err, ErrNodeNotFound) {
+ return nil, nil
+ }
+ return nil, err
}
subTree, err := c.service.GetSubTree(ctx, bktInfo, versionTree, rootID, 2, false)
if err != nil {
if errors.Is(err, ErrNodeNotFound) {
- return nil, "", nil
+ return nil, nil
}
- return nil, "", err
+ return nil, err
}
nodesMap := make(map[string][]NodeResponse, len(subTree))
@@ -347,10 +349,6 @@ func (c *Tree) GetSubTreeByPrefix(ctx context.Context, bktInfo *data.BucketInfo,
}
fileName := GetFilename(node)
- if !strings.HasPrefix(fileName, tailPrefix) {
- continue
- }
-
nodes := nodesMap[fileName]
// Add all nodes if flag latestOnly is false.
@@ -374,7 +372,7 @@ func (c *Tree) GetSubTreeByPrefix(ctx context.Context, bktInfo *data.BucketInfo,
result = append(result, nodeResponseToNodeInfo(nodes)...)
}
- return result, strings.TrimSuffix(prefix, tailPrefix), nil
+ return result, nil
}
func nodeResponseToNodeInfo(nodes []NodeResponse) []data.NodeInfo {
@@ -386,22 +384,6 @@ func nodeResponseToNodeInfo(nodes []NodeResponse) []data.NodeInfo {
return nodesInfo
}
-func (c *Tree) determinePrefixNode(ctx context.Context, bktInfo *data.BucketInfo, treeID, prefix string) ([]uint64, string, error) {
- rootID := []uint64{0}
- path := strings.Split(prefix, separator)
- tailPrefix := path[len(path)-1]
-
- if len(path) > 1 {
- var err error
- rootID, err = c.getPrefixNodeID(ctx, bktInfo, treeID, path[:len(path)-1])
- if err != nil {
- return nil, "", err
- }
- }
-
- return rootID, tailPrefix, nil
-}
-
func (c *Tree) getPrefixNodeID(ctx context.Context, bktInfo *data.BucketInfo, treeID string, prefixPath []string) ([]uint64, error) {
p := &GetNodesParams{
CnrID: bktInfo.CID,
@@ -424,7 +406,7 @@ func (c *Tree) getPrefixNodeID(ctx context.Context, bktInfo *data.BucketInfo, tr
}
if len(intermediateNodes) == 0 {
- return nil, layer.ErrNodeNotFound
+ return nil, ErrNodeNotFound
}
return intermediateNodes, nil