Skip to content

Commit 11d88fa

Browse files
author
flash
committed
chore: update go-cs3apis to v0.0.0-20260604164754-c3fdb0aa5e9e
Update to the latest go-cs3apis which includes three upstream changes: 1. cs3org/cs3apis#272 — container-specific permissions + immutable RPCs 2. cs3org/cs3apis#273 — OCM share state changes 3. Labels API moved from StorageProvider to cs3/labels/v1beta1 Labels API migration: Before: opencloud -> Gateway -> StorageProvider (ProviderAPI.AddLabel) After: opencloud -> Gateway -> StorageProvider (LabelsAPI.AddLabel) The StorageProvider now registers as LabelsAPIServer in addition to ProviderAPIServer and SpacesAPIServer. The Gateway routes Labels calls to the StorageProvider via a new LabelsAPIClient, using the same GRPC connection pool. Changes: - go.mod: bump go-cs3apis - StorageProvider: register as LabelsAPIServer, implement AddLabel/RemoveLabel via Storage FS interface - Gateway: route AddLabel/RemoveLabel to StorageProvider's LabelsAPI - Pool: add LabelsProviderSelector and GetLabelsProviderServiceClient - Add SetImmutable/UnsetImmutable to all ProviderAPI implementations - Regenerate mocks
1 parent a33d810 commit 11d88fa

11 files changed

Lines changed: 311 additions & 103 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/cheggaaa/pb/v3 v3.1.7
1818
github.com/coreos/go-oidc/v3 v3.18.0
1919
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e
20-
github.com/cs3org/go-cs3apis v0.0.0-20260424072047-8d9ef7076ae9
20+
github.com/cs3org/go-cs3apis v0.0.0-20260604164754-c3fdb0aa5e9e
2121
github.com/dgraph-io/ristretto v0.2.0
2222
github.com/emvi/iso-639-1 v1.1.1
2323
github.com/eventials/go-tus v0.0.0-20220610120217-05d0564bb571

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo
239239
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
240240
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJffz4pz0o1WuQxJ28+5x5JgaHD8=
241241
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4=
242-
github.com/cs3org/go-cs3apis v0.0.0-20260424072047-8d9ef7076ae9 h1:8WtMb7TKKx1AJM3j+uR+H25y4v+b8o8GIQg/2ooCyRo=
243-
github.com/cs3org/go-cs3apis v0.0.0-20260424072047-8d9ef7076ae9/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
242+
github.com/cs3org/go-cs3apis v0.0.0-20260604164754-c3fdb0aa5e9e h1:daOgm7xFqJi6LkKUBAENiHOy4IBVSlpculXLd1cPZWk=
243+
github.com/cs3org/go-cs3apis v0.0.0-20260604164754-c3fdb0aa5e9e/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
244244
github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=
245245
github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
246246
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package gateway
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
labels "github.com/cs3org/go-cs3apis/cs3/labels/v1beta1"
8+
"github.com/opencloud-eu/reva/v2/pkg/rgrpc/status"
9+
"github.com/opencloud-eu/reva/v2/pkg/rgrpc/todo/pool"
10+
"github.com/pkg/errors"
11+
"google.golang.org/grpc/codes"
12+
gstatus "google.golang.org/grpc/status"
13+
)
14+
15+
func (s *svc) AddLabel(ctx context.Context, req *labels.AddLabelRequest) (*labels.AddLabelResponse, error) {
16+
_, p, ref, err := s.findAndUnwrap(ctx, req.Ref)
17+
if err != nil {
18+
return &labels.AddLabelResponse{
19+
Status: status.NewStatusFromErrType(ctx, fmt.Sprintf("gateway could not find space for ref=%+v", req.Ref), err),
20+
}, nil
21+
}
22+
req.Ref = ref
23+
24+
lc, err := s.getLabelsProviderClient(p.Address)
25+
if err != nil {
26+
return nil, errors.Wrap(err, "gateway: error getting labels client")
27+
}
28+
return lc.AddLabel(ctx, req)
29+
}
30+
31+
func (s *svc) RemoveLabel(ctx context.Context, req *labels.RemoveLabelRequest) (*labels.RemoveLabelResponse, error) {
32+
_, p, ref, err := s.findAndUnwrap(ctx, req.Ref)
33+
if err != nil {
34+
return &labels.RemoveLabelResponse{
35+
Status: status.NewStatusFromErrType(ctx, fmt.Sprintf("gateway could not find space for ref=%+v", req.Ref), err),
36+
}, nil
37+
}
38+
req.Ref = ref
39+
40+
lc, err := s.getLabelsProviderClient(p.Address)
41+
if err != nil {
42+
return nil, errors.Wrap(err, "gateway: error getting labels client")
43+
}
44+
return lc.RemoveLabel(ctx, req)
45+
}
46+
47+
func (s *svc) ListLabels(ctx context.Context, req *labels.ListLabelsRequest) (*labels.ListLabelsResponse, error) {
48+
return nil, gstatus.Errorf(codes.Unimplemented, "ListLabels not yet implemented")
49+
}
50+
51+
func (s *svc) ListResourcesForLabel(ctx context.Context, req *labels.ListResourcesForLabelRequest) (*labels.ListResourcesForLabelResponse, error) {
52+
return nil, gstatus.Errorf(codes.Unimplemented, "ListResourcesForLabel not yet implemented")
53+
}
54+
55+
func (s *svc) getLabelsProviderClient(address string) (labels.LabelsAPIClient, error) {
56+
c, err := pool.GetLabelsProviderServiceClient(address)
57+
if err != nil {
58+
return nil, err
59+
}
60+
return c, nil
61+
}

internal/grpc/services/gateway/storageprovider.go

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -725,46 +725,6 @@ func (s *svc) CreateContainer(ctx context.Context, req *provider.CreateContainer
725725
return res, nil
726726
}
727727

728-
func (s *svc) AddLabel(ctx context.Context, req *provider.AddLabelRequest) (*provider.AddLabelResponse, error) {
729-
var c provider.ProviderAPIClient
730-
var err error
731-
c, _, req.Ref, err = s.findAndUnwrap(ctx, req.Ref)
732-
if err != nil {
733-
return &provider.AddLabelResponse{
734-
Status: status.NewStatusFromErrType(ctx, fmt.Sprintf("gateway could not find space for ref=%+v", req.Ref), err),
735-
}, nil
736-
}
737-
738-
res, err := c.AddLabel(ctx, req)
739-
if err != nil {
740-
return &provider.AddLabelResponse{
741-
Status: status.NewStatusFromErrType(ctx, "gateway could not call AddLabel", err),
742-
}, nil
743-
}
744-
745-
return res, nil
746-
}
747-
748-
func (s *svc) RemoveLabel(ctx context.Context, req *provider.RemoveLabelRequest) (*provider.RemoveLabelResponse, error) {
749-
var c provider.ProviderAPIClient
750-
var err error
751-
c, _, req.Ref, err = s.findAndUnwrap(ctx, req.Ref)
752-
if err != nil {
753-
return &provider.RemoveLabelResponse{
754-
Status: status.NewStatusFromErrType(ctx, fmt.Sprintf("gateway could not find space for ref=%+v", req.Ref), err),
755-
}, nil
756-
}
757-
758-
res, err := c.RemoveLabel(ctx, req)
759-
if err != nil {
760-
return &provider.RemoveLabelResponse{
761-
Status: status.NewStatusFromErrType(ctx, "gateway could not call RemoveLabel", err),
762-
}, nil
763-
}
764-
765-
return res, nil
766-
}
767-
768728
func (s *svc) TouchFile(ctx context.Context, req *provider.TouchFileRequest) (*provider.TouchFileResponse, error) {
769729
var c provider.ProviderAPIClient
770730
var err error

internal/grpc/services/gateway/storageprovidercache.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,9 @@ func (c *cachedAPIClient) GetHome(ctx context.Context, in *provider.GetHomeReque
264264
func (c *cachedAPIClient) TouchFile(ctx context.Context, in *provider.TouchFileRequest, opts ...grpc.CallOption) (*provider.TouchFileResponse, error) {
265265
return c.c.TouchFile(ctx, in, opts...)
266266
}
267-
func (c *cachedAPIClient) AddLabel(ctx context.Context, in *provider.AddLabelRequest, opts ...grpc.CallOption) (*provider.AddLabelResponse, error) {
268-
return c.c.AddLabel(ctx, in, opts...)
267+
func (c *cachedAPIClient) SetImmutable(ctx context.Context, in *provider.SetImmutableRequest, opts ...grpc.CallOption) (*provider.SetImmutableResponse, error) {
268+
return c.c.SetImmutable(ctx, in, opts...)
269269
}
270-
func (c *cachedAPIClient) RemoveLabel(ctx context.Context, in *provider.RemoveLabelRequest, opts ...grpc.CallOption) (*provider.RemoveLabelResponse, error) {
271-
return c.c.RemoveLabel(ctx, in, opts...)
270+
func (c *cachedAPIClient) UnsetImmutable(ctx context.Context, in *provider.UnsetImmutableRequest, opts ...grpc.CallOption) (*provider.UnsetImmutableResponse, error) {
271+
return c.c.UnsetImmutable(ctx, in, opts...)
272272
}

internal/grpc/services/publicstorageprovider/publicstorageprovider.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -929,11 +929,11 @@ func (s *service) GetQuota(ctx context.Context, req *provider.GetQuotaRequest) (
929929
return nil, gstatus.Errorf(codes.Unimplemented, "method not implemented")
930930
}
931931

932-
func (s *service) AddLabel(ctx context.Context, req *provider.AddLabelRequest) (*provider.AddLabelResponse, error) {
932+
func (s *service) SetImmutable(ctx context.Context, req *provider.SetImmutableRequest) (*provider.SetImmutableResponse, error) {
933933
return nil, gstatus.Errorf(codes.Unimplemented, "method not implemented")
934934
}
935935

936-
func (s *service) RemoveLabel(ctx context.Context, req *provider.RemoveLabelRequest) (*provider.RemoveLabelResponse, error) {
936+
func (s *service) UnsetImmutable(ctx context.Context, req *provider.UnsetImmutableRequest) (*provider.UnsetImmutableResponse, error) {
937937
return nil, gstatus.Errorf(codes.Unimplemented, "method not implemented")
938938
}
939939

internal/grpc/services/sharesstorageprovider/sharesstorageprovider.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,11 +1036,11 @@ func (s *service) GetQuota(ctx context.Context, req *provider.GetQuotaRequest) (
10361036
}, nil
10371037
}
10381038

1039-
func (s *service) AddLabel(ctx context.Context, req *provider.AddLabelRequest) (*provider.AddLabelResponse, error) {
1039+
func (s *service) SetImmutable(ctx context.Context, req *provider.SetImmutableRequest) (*provider.SetImmutableResponse, error) {
10401040
return nil, gstatus.Errorf(codes.Unimplemented, "method not implemented")
10411041
}
10421042

1043-
func (s *service) RemoveLabel(ctx context.Context, req *provider.RemoveLabelRequest) (*provider.RemoveLabelResponse, error) {
1043+
func (s *service) UnsetImmutable(ctx context.Context, req *provider.UnsetImmutableRequest) (*provider.UnsetImmutableResponse, error) {
10441044
return nil, gstatus.Errorf(codes.Unimplemented, "method not implemented")
10451045
}
10461046

internal/grpc/services/storageprovider/storageprovider.go

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"strings"
3131
"time"
3232

33+
labels "github.com/cs3org/go-cs3apis/cs3/labels/v1beta1"
3334
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
3435
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
3536
typesv1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
@@ -119,6 +120,7 @@ func (s *Service) UnprotectedEndpoints() []string { return []string{} }
119120
func (s *Service) Register(ss *grpc.Server) {
120121
provider.RegisterProviderAPIServer(ss, s)
121122
provider.RegisterSpacesAPIServer(ss, s)
123+
labels.RegisterLabelsAPIServer(ss, s)
122124
}
123125

124126
func parseXSTypes(xsTypes map[string]uint32) ([]*provider.ResourceChecksumPriority, error) {
@@ -286,6 +288,54 @@ func (s *Service) Unlock(ctx context.Context, req *provider.UnlockRequest) (*pro
286288
}, nil
287289
}
288290

291+
func (s *Service) AddLabel(ctx context.Context, req *labels.AddLabelRequest) (*labels.AddLabelResponse, error) {
292+
err := s.Storage.AddLabel(ctx, req.Ref, req.UserId, req.Label)
293+
if err != nil {
294+
return &labels.AddLabelResponse{
295+
Status: status.NewStatusFromErrType(ctx, "add label", err),
296+
}, nil
297+
}
298+
return &labels.AddLabelResponse{
299+
Status: status.NewOK(ctx),
300+
}, nil
301+
}
302+
303+
func (s *Service) RemoveLabel(ctx context.Context, req *labels.RemoveLabelRequest) (*labels.RemoveLabelResponse, error) {
304+
err := s.Storage.RemoveLabel(ctx, req.Ref, req.UserId, req.Label)
305+
if err != nil {
306+
return &labels.RemoveLabelResponse{
307+
Status: status.NewStatusFromErrType(ctx, "remove label", err),
308+
}, nil
309+
}
310+
return &labels.RemoveLabelResponse{
311+
Status: status.NewOK(ctx),
312+
}, nil
313+
}
314+
315+
func (s *Service) ListLabels(ctx context.Context, req *labels.ListLabelsRequest) (*labels.ListLabelsResponse, error) {
316+
return &labels.ListLabelsResponse{
317+
Status: status.NewUnimplemented(ctx, nil, "ListLabels not yet implemented"),
318+
}, nil
319+
}
320+
321+
func (s *Service) ListResourcesForLabel(ctx context.Context, req *labels.ListResourcesForLabelRequest) (*labels.ListResourcesForLabelResponse, error) {
322+
return &labels.ListResourcesForLabelResponse{
323+
Status: status.NewUnimplemented(ctx, nil, "ListResourcesForLabel not yet implemented"),
324+
}, nil
325+
}
326+
327+
func (s *Service) SetImmutable(ctx context.Context, req *provider.SetImmutableRequest) (*provider.SetImmutableResponse, error) {
328+
return &provider.SetImmutableResponse{
329+
Status: status.NewUnimplemented(ctx, nil, "SetImmutable not yet implemented"),
330+
}, nil
331+
}
332+
333+
func (s *Service) UnsetImmutable(ctx context.Context, req *provider.UnsetImmutableRequest) (*provider.UnsetImmutableResponse, error) {
334+
return &provider.UnsetImmutableResponse{
335+
Status: status.NewUnimplemented(ctx, nil, "UnsetImmutable not yet implemented"),
336+
}, nil
337+
}
338+
289339
func (s *Service) InitiateFileDownload(ctx context.Context, req *provider.InitiateFileDownloadRequest) (*provider.InitiateFileDownloadResponse, error) {
290340
// TODO(labkode): maybe add some checks before download starts? eg. check permissions?
291341
// TODO(labkode): maybe add short-lived token?
@@ -712,36 +762,6 @@ func (s *Service) TouchFile(ctx context.Context, req *provider.TouchFileRequest)
712762
}, nil
713763
}
714764

715-
func (s *Service) AddLabel(ctx context.Context, req *provider.AddLabelRequest) (*provider.AddLabelResponse, error) {
716-
appctx.GetLogger(ctx).Debug().Msg("AddLabel")
717-
718-
err := s.Storage.AddLabel(ctx, req.Ref, req.UserId, req.Label)
719-
if err != nil {
720-
return &provider.AddLabelResponse{
721-
Status: status.NewStatusFromErrType(ctx, "add label", err),
722-
}, nil
723-
}
724-
725-
return &provider.AddLabelResponse{
726-
Status: status.NewOK(ctx),
727-
}, nil
728-
}
729-
730-
func (s *Service) RemoveLabel(ctx context.Context, req *provider.RemoveLabelRequest) (*provider.RemoveLabelResponse, error) {
731-
appctx.GetLogger(ctx).Debug().Msg("RemoveLabel")
732-
733-
err := s.Storage.RemoveLabel(ctx, req.Ref, req.UserId, req.Label)
734-
if err != nil {
735-
return &provider.RemoveLabelResponse{
736-
Status: status.NewStatusFromErrType(ctx, "remove label", err),
737-
}, nil
738-
}
739-
740-
return &provider.RemoveLabelResponse{
741-
Status: status.NewOK(ctx),
742-
}, nil
743-
}
744-
745765
func (s *Service) Delete(ctx context.Context, req *provider.DeleteRequest) (*provider.DeleteResponse, error) {
746766
if req.Ref.GetPath() == "/" {
747767
return &provider.DeleteResponse{

pkg/rgrpc/todo/pool/client.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
authprovider "github.com/cs3org/go-cs3apis/cs3/auth/provider/v1beta1"
2626
authregistry "github.com/cs3org/go-cs3apis/cs3/auth/registry/v1beta1"
2727
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
28+
labelsService "github.com/cs3org/go-cs3apis/cs3/labels/v1beta1"
2829
group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
2930
tenant "github.com/cs3org/go-cs3apis/cs3/identity/tenant/v1beta1"
3031
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
@@ -77,6 +78,12 @@ func GetSpacesProviderServiceClient(id string, opts ...Option) (storageprovider.
7778
return selector.Next()
7879
}
7980

81+
// GetLabelsProviderServiceClient returns a LabelsAPIClient connected to the StorageProvider.
82+
func GetLabelsProviderServiceClient(id string, opts ...Option) (labelsService.LabelsAPIClient, error) {
83+
selector, _ := LabelsProviderSelector(id, opts...)
84+
return selector.Next()
85+
}
86+
8087
// GetAuthRegistryServiceClient returns a new AuthRegistryServiceClient.
8188
func GetAuthRegistryServiceClient(id string, opts ...Option) (authregistry.RegistryAPIClient, error) {
8289
selector, _ := AuthRegistrySelector(id, opts...)

pkg/rgrpc/todo/pool/selector.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
authProvider "github.com/cs3org/go-cs3apis/cs3/auth/provider/v1beta1"
3030
authRegistry "github.com/cs3org/go-cs3apis/cs3/auth/registry/v1beta1"
3131
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
32+
labelsService "github.com/cs3org/go-cs3apis/cs3/labels/v1beta1"
3233
identityGroup "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
3334
identityTenant "github.com/cs3org/go-cs3apis/cs3/identity/tenant/v1beta1"
3435
identityUser "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
@@ -205,6 +206,17 @@ func SpacesProviderSelector(id string, options ...Option) (*Selector[storageProv
205206
), nil
206207
}
207208

209+
// LabelsProviderSelector returns a Selector[labelsService.LabelsAPIClient].
210+
// The LabelsAPI service is registered on the same GRPC server as the StorageProvider.
211+
func LabelsProviderSelector(id string, options ...Option) (*Selector[labelsService.LabelsAPIClient], error) {
212+
return GetSelector[labelsService.LabelsAPIClient](
213+
"LabelsProviderSelector",
214+
id,
215+
labelsService.NewLabelsAPIClient,
216+
options...,
217+
), nil
218+
}
219+
208220
// AuthRegistrySelector returns a Selector[authRegistry.RegistryAPIClient].
209221
func AuthRegistrySelector(id string, options ...Option) (*Selector[authRegistry.RegistryAPIClient], error) {
210222
return GetSelector[authRegistry.RegistryAPIClient](

0 commit comments

Comments
 (0)