Skip to content

Commit e7824d5

Browse files
committed
WIP
1 parent 8301819 commit e7824d5

11 files changed

Lines changed: 355 additions & 207 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/coreos/go-oidc/v3 v3.15.0
1515
github.com/creasty/defaults v1.8.0
1616
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e
17-
github.com/cs3org/go-cs3apis v0.0.0-20250902085700-00cd04c8e01c
17+
github.com/cs3org/go-cs3apis v0.0.0-20250908152307-4ca807afe54e
1818
github.com/dgraph-io/ristretto v0.2.0
1919
github.com/dolthub/go-mysql-server v0.14.0
2020
github.com/glpatcern/go-mime v0.0.0-20221026162842-2a8d71ad17a9

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,12 @@ github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJff
897897
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4=
898898
github.com/cs3org/go-cs3apis v0.0.0-20250902085700-00cd04c8e01c h1:LwCysopto1uLelEkfXFEk5jOqrphw8CRGRdAej1Km/8=
899899
github.com/cs3org/go-cs3apis v0.0.0-20250902085700-00cd04c8e01c/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
900+
github.com/cs3org/go-cs3apis v0.0.0-20250908101802-cebd640521ba h1:E9kpTupCWD6IbppIPvIx1QAbfiilhhl/4q5onqndF6s=
901+
github.com/cs3org/go-cs3apis v0.0.0-20250908101802-cebd640521ba/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
902+
github.com/cs3org/go-cs3apis v0.0.0-20250908131828-2f5e9a361154 h1:kly4UEZ+7ygUa9L8OJlgbkEkf/nuDZ+SbaYsPxMFAW0=
903+
github.com/cs3org/go-cs3apis v0.0.0-20250908131828-2f5e9a361154/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
904+
github.com/cs3org/go-cs3apis v0.0.0-20250908152307-4ca807afe54e h1:fC/BWMVWNFlSbzvSp2xTaH0qpJiq7ScRrOsCzpgi1xI=
905+
github.com/cs3org/go-cs3apis v0.0.0-20250908152307-4ca807afe54e/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
900906
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
901907
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
902908
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

internal/grpc/services/spacesregistry/spacesregistry.go

Lines changed: 49 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -150,42 +150,42 @@ func countTypeFilters(filters []*provider.ListStorageSpacesRequest_Filter) (coun
150150

151151
func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSpacesRequest) (*provider.ListStorageSpacesResponse, error) {
152152
user := appctx.ContextMustGetUser(ctx)
153-
filters := req.Filters
153+
// filters := req.Filters
154154

155155
sp := []*provider.StorageSpace{}
156-
if countTypeFilters(filters) == 0 {
157-
homes, err := s.listSpacesByType(ctx, user, spaces.SpaceTypeHome)
158-
if err != nil {
159-
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
160-
}
161-
sp = append(sp, homes...)
162-
163-
projects, err := s.listSpacesByType(ctx, user, spaces.SpaceTypeProject)
164-
if err != nil {
165-
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
166-
}
167-
sp = append(sp, projects...)
156+
//if countTypeFilters(filters) == 0 {
157+
homes, err := s.listSpacesByType(ctx, req, user, spaces.SpaceTypeHome)
158+
if err != nil {
159+
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
160+
}
161+
sp = append(sp, homes...)
168162

169-
publicSpaces, err := s.getPublicSpaces(ctx)
170-
if err != nil {
171-
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
172-
}
173-
sp = append(sp, publicSpaces...)
163+
projects, err := s.listSpacesByType(ctx, req, user, spaces.SpaceTypeProject)
164+
if err != nil {
165+
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
174166
}
167+
sp = append(sp, projects...)
175168

176-
for _, filter := range filters {
177-
switch filter.Type {
178-
case provider.ListStorageSpacesRequest_Filter_TYPE_SPACE_TYPE:
179-
spaces, err := s.listSpacesByType(ctx, user, spaces.SpaceType(filter.Term.(*provider.ListStorageSpacesRequest_Filter_SpaceType).SpaceType))
180-
if err != nil {
181-
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
182-
}
183-
sp = append(sp, spaces...)
184-
case provider.ListStorageSpacesRequest_Filter_TYPE_ID:
185-
default:
186-
return nil, errtypes.NotSupported("filter not supported")
187-
}
169+
publicSpaces, err := s.getPublicSpaces(ctx)
170+
if err != nil {
171+
return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
188172
}
173+
sp = append(sp, publicSpaces...)
174+
// }
175+
176+
// for _, filter := range filters {
177+
// switch filter.Type {
178+
// case provider.ListStorageSpacesRequest_Filter_TYPE_SPACE_TYPE:
179+
// spaces, err := s.listSpacesByType(ctx, req, user, spaces.SpaceType(filter.Term.(*provider.ListStorageSpacesRequest_Filter_SpaceType).SpaceType))
180+
// if err != nil {
181+
// return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
182+
// }
183+
// sp = append(sp, spaces...)
184+
// case provider.ListStorageSpacesRequest_Filter_TYPE_ID:
185+
// default:
186+
// return nil, errtypes.NotSupported("filter not supported")
187+
// }
188+
// }
189189

190190
// TODO: we should filter at the driver level.
191191
// for now let's do it here. optimizations later :)
@@ -205,7 +205,7 @@ func isFilterByID(filters []*provider.ListStorageSpacesRequest_Filter) (string,
205205
return "", false
206206
}
207207

208-
func (s *service) listSpacesByType(ctx context.Context, user *userpb.User, spaceType spaces.SpaceType) ([]*provider.StorageSpace, error) {
208+
func (s *service) listSpacesByType(ctx context.Context, req *provider.ListStorageSpacesRequest, user *userpb.User, spaceType spaces.SpaceType) ([]*provider.StorageSpace, error) {
209209
sp := []*provider.StorageSpace{}
210210

211211
switch spaceType {
@@ -219,7 +219,9 @@ func (s *service) listSpacesByType(ctx context.Context, user *userpb.User, space
219219
}
220220
case spaces.SpaceTypeProject:
221221
log.Debug().Msg("Listing spaces by type project")
222-
resp, err := s.projects.ListStorageSpaces(ctx, &provider.ListStorageSpacesRequest{})
222+
resp, err := s.projects.ListStorageSpaces(ctx, &provider.ListStorageSpacesRequest{
223+
Filters: req.Filters,
224+
})
223225
if err != nil {
224226
return nil, err
225227
}
@@ -310,21 +312,21 @@ func (s *service) decorateProject(ctx context.Context, proj *provider.StorageSpa
310312
}
311313

312314
// Add mtime of space
313-
var resourceInfo *provider.ResourceInfo
314-
if res, err := s.resourceInfoCache.Get(proj.RootInfo.Path); err == nil && res != nil {
315-
resourceInfo = res
316-
} else {
317-
statRes, err := s.gw.Stat(ctx, &provider.StatRequest{Ref: &provider.Reference{
318-
Path: proj.RootInfo.Path,
319-
}})
320-
if err != nil || statRes.Status == nil || statRes.Status.Code != rpcv1beta1.Code_CODE_OK {
321-
return fmt.Errorf("failed to stat path %s for project %s", proj.RootInfo.Path, proj.Name)
322-
}
323-
resourceInfo = statRes.Info
324-
s.resourceInfoCache.Set(proj.RootInfo.Path, resourceInfo)
325-
}
326-
327-
proj.Mtime = resourceInfo.Mtime
315+
// var resourceInfo *provider.ResourceInfo
316+
// if res, err := s.resourceInfoCache.Get(proj.RootInfo.Path); err == nil && res != nil {
317+
// resourceInfo = res
318+
// } else {
319+
// statRes, err := s.gw.Stat(ctx, &provider.StatRequest{Ref: &provider.Reference{
320+
// Path: proj.RootInfo.Path,
321+
// }})
322+
// if err != nil || statRes.Status == nil || statRes.Status.Code != rpcv1beta1.Code_CODE_OK {
323+
// return fmt.Errorf("failed to stat path %s for project %s", proj.RootInfo.Path, proj.Name)
324+
// }
325+
// resourceInfo = statRes.Info
326+
// s.resourceInfoCache.Set(proj.RootInfo.Path, resourceInfo)
327+
// }
328+
329+
// proj.Mtime = resourceInfo.Mtime
328330
return nil
329331
}
330332

internal/grpc/services/storageprovider/storageprovider.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"strings"
3232
"unicode/utf8"
3333

34+
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
3435
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
3536
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
3637
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
@@ -40,7 +41,9 @@ import (
4041
"github.com/cs3org/reva/v3/pkg/plugin"
4142
"github.com/cs3org/reva/v3/pkg/rgrpc"
4243
"github.com/cs3org/reva/v3/pkg/rgrpc/status"
44+
"github.com/cs3org/reva/v3/pkg/rgrpc/todo/pool"
4345
"github.com/cs3org/reva/v3/pkg/rhttp/router"
46+
"github.com/cs3org/reva/v3/pkg/sharedconf"
4447
"github.com/cs3org/reva/v3/pkg/spaces"
4548
"github.com/cs3org/reva/v3/pkg/storage"
4649
"github.com/cs3org/reva/v3/pkg/storage/fs/registry"
@@ -69,6 +72,7 @@ type config struct {
6972
ExposeDataServer bool `docs:"false;Whether to expose data server." mapstructure:"expose_data_server"` // if true the client will be able to upload/download directly to it
7073
AvailableXS map[string]uint32 `docs:"nil;List of available checksums." mapstructure:"available_checksums"`
7174
CustomMimeTypesJSON string `docs:"nil;An optional mapping file with the list of supported custom file extensions and corresponding mime types." mapstructure:"custom_mime_types_json"`
75+
GatewaySvc string `mapstructure:"gatewaysvc"`
7276
MinimunAllowedPathLevelForShare int `mapstructure:"minimum_allowed_path_level_for_share"`
7377
}
7478

@@ -98,6 +102,7 @@ func (c *config) ApplyDefaults() {
98102
if len(c.AvailableXS) == 0 {
99103
c.AvailableXS = map[string]uint32{"md5": 100, "unset": 1000}
100104
}
105+
c.GatewaySvc = sharedconf.GetGatewaySVC(c.GatewaySvc)
101106
}
102107

103108
type FSWithListRegexSuport interface {
@@ -773,12 +778,12 @@ func (s *service) Move(ctx context.Context, req *provider.MoveRequest) (*provide
773778
}
774779

775780
func (s *service) addSpaceInfo(ri *provider.ResourceInfo) {
776-
space := spaces.PathToSpaceID(ri.Path)
777-
ri.Id.SpaceId = space
781+
spaceID := spaces.PathToSpaceID(ri.Path)
782+
ri.Id.SpaceId = spaceID
778783
if ri.ParentId == nil {
779784
ri.ParentId = &provider.ResourceId{}
780785
}
781-
ri.ParentId.SpaceId = space
786+
ri.ParentId.SpaceId = spaceID
782787
}
783788

784789
func (s *service) Stat(ctx context.Context, req *provider.StatRequest) (*provider.StatResponse, error) {
@@ -1663,3 +1668,7 @@ func (v descendingMtime) Less(i, j int) bool {
16631668
func (v descendingMtime) Swap(i, j int) {
16641669
v[i], v[j] = v[j], v[i]
16651670
}
1671+
1672+
func (s *service) getClient() (gateway.GatewayAPIClient, error) {
1673+
return pool.GetGatewayServiceClient(pool.Endpoint(s.conf.GatewaySvc))
1674+
}

0 commit comments

Comments
 (0)