diff --git a/internal/grpc/services/gateway/storageprovider.go b/internal/grpc/services/gateway/storageprovider.go index 0de25d099b1..47f1f4abbfc 100644 --- a/internal/grpc/services/gateway/storageprovider.go +++ b/internal/grpc/services/gateway/storageprovider.go @@ -196,8 +196,13 @@ func (s *svc) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSp uniqueSpaces := map[string]*provider.StorageSpace{} for i := range providers { if errors[i] != nil { - log.Debug().Err(errors[i]).Msg("skipping provider") - continue + if len(providers) > 1 { + log.Debug().Err(errors[i]).Msg("skipping provider") + continue + } + return &provider.ListStorageSpacesResponse{ + Status: status.NewStatusFromErrType(ctx, "error listing space", errors[i]), + }, nil } for j := range spacesFromProviders[i] { uniqueSpaces[spacesFromProviders[i][j].Id.OpaqueId] = spacesFromProviders[i][j] @@ -207,6 +212,11 @@ func (s *svc) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSp for spaceID := range uniqueSpaces { spaces = append(spaces, uniqueSpaces[spaceID]) } + if len(spaces) == 0 { + return &provider.ListStorageSpacesResponse{ + Status: status.NewNotFound(ctx, "space not found") + }, nil + } return &provider.ListStorageSpacesResponse{ Status: status.NewOK(ctx), diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 0fe2a3600f6..9c8529971ee 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -433,6 +433,7 @@ func hasNodeID(s *provider.StorageSpace) bool { } func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSpacesRequest) (*provider.ListStorageSpacesResponse, error) { + log := appctx.GetLogger(ctx) spaces, err := s.storage.ListStorageSpaces(ctx, req.Filters) if err != nil { var st *rpc.Status @@ -461,6 +462,8 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora if spaces[i].Root.StorageId == "" { spaces[i].Root.StorageId = s.mountID } + } else if spaces[i].Id == nil || spaces[i].Id.OpaqueId == "" { + log.Warn().Str("service", "storageprovider").Str("driver", s.conf.Driver).Interface("space", spaces[i]).Msg("space is missing space id and root id") } } diff --git a/pkg/storage/utils/decomposedfs/decomposedfs.go b/pkg/storage/utils/decomposedfs/decomposedfs.go index 03208cbc95c..eb31b6eb976 100644 --- a/pkg/storage/utils/decomposedfs/decomposedfs.go +++ b/pkg/storage/utils/decomposedfs/decomposedfs.go @@ -577,7 +577,6 @@ func (fs *Decomposedfs) ListStorageSpaces(ctx context.Context, filter []*provide // do not list shares as spaces for the owner continue } - space.Name = n.Name } else { space.Name = "root" // do not expose the id as name, this is the root of a space // TODO read from extended attribute for project / group spaces