From 3abd76eecf8b82d72b1fa0eefc89ed21489fba09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Wed, 8 Dec 2021 17:44:50 +0100 Subject: [PATCH] allow multiple space type fileters on decomposedfs (#2343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- ...sedfs-allow-multiple-space-type-filters.md | 5 ++++ pkg/storage/utils/decomposedfs/spaces.go | 29 ++++++++++--------- 2 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 changelog/unreleased/decomposedfs-allow-multiple-space-type-filters.md diff --git a/changelog/unreleased/decomposedfs-allow-multiple-space-type-filters.md b/changelog/unreleased/decomposedfs-allow-multiple-space-type-filters.md new file mode 100644 index 0000000000..b80a1321f8 --- /dev/null +++ b/changelog/unreleased/decomposedfs-allow-multiple-space-type-filters.md @@ -0,0 +1,5 @@ +Enhancement: Allow multiple space type fileters on decomposedfs + +The decomposedfs driver now evaluates multiple space type filters when listing storage spaces. + +https://github.com/cs3org/reva/pull/2343 \ No newline at end of file diff --git a/pkg/storage/utils/decomposedfs/spaces.go b/pkg/storage/utils/decomposedfs/spaces.go index 661d0f4a57..d28ac55257 100644 --- a/pkg/storage/utils/decomposedfs/spaces.go +++ b/pkg/storage/utils/decomposedfs/spaces.go @@ -176,29 +176,37 @@ func (fs *Decomposedfs) ListStorageSpaces(ctx context.Context, filter []*provide // we would not need /nodes/root if access always happened via spaceid+relative path var ( - spaceType = spaceTypeAny - spaceID = spaceIDAny - nodeID = spaceIDAny - err error + spaceID = spaceIDAny + nodeID = spaceIDAny ) + spaceTypes := []string{} + for i := range filter { switch filter[i].Type { case provider.ListStorageSpacesRequest_Filter_TYPE_SPACE_TYPE: - spaceType = filter[i].GetSpaceType() + spaceTypes = append(spaceTypes, filter[i].GetSpaceType()) case provider.ListStorageSpacesRequest_Filter_TYPE_ID: spaceID, nodeID = utils.SplitStorageSpaceID(filter[i].GetId().OpaqueId) } } + if len(spaceTypes) == 0 { + spaceTypes = []string{"*"} + } spaces := []*provider.StorageSpace{} // build the glob path, eg. // /path/to/root/spaces/{spaceType}/{spaceId} // /path/to/root/spaces/personal/nodeid // /path/to/root/spaces/shared/nodeid - matches, err := filepath.Glob(filepath.Join(fs.o.Root, "spaces", spaceType, nodeID)) - if err != nil { - return nil, err + + matches := []string{} + for _, spaceType := range spaceTypes { + m, err := filepath.Glob(filepath.Join(fs.o.Root, "spaces", spaceType, nodeID)) + if err != nil { + return nil, err + } + matches = append(matches, m...) } u, ok := ctxpkg.ContextGetUser(ctx) @@ -232,11 +240,6 @@ func (fs *Decomposedfs) ListStorageSpaces(ctx context.Context, filter []*provide spaceType := filepath.Base(filepath.Dir(matches[i])) - // if spaceType == "share" { - // do not list shares at all? the sharesstorageprovider is responsible for it - // continue - // } - owner, err := n.Owner() if err != nil { appctx.GetLogger(ctx).Error().Err(err).Interface("node", n).Msg("could not read owner, skipping")