Skip to content

Commit

Permalink
commit share to storage grant (#196)
Browse files Browse the repository at this point in the history
* commit share to storage grant

* refactor error logic

* fix length to 0 for make allocated slices

* remove fmt.Println

* simplify storage logic and use ref for storage ops

* remove unused package and rely on opencensus

* filter shares by resource id
  • Loading branch information
labkode committed Aug 16, 2019
1 parent 346ddee commit c67e20d
Show file tree
Hide file tree
Showing 21 changed files with 310 additions and 269 deletions.
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
- Felix Hillingshaeuser <felix@mxcore.de>
- Hugo Gonzalez Labrador <github@hugo.labkode.com>
- Jörn Friedrich Dreyer <jfd@butonic.de>
- Mohitty <mohitt@iitk.ac.in>
5 changes: 5 additions & 0 deletions cmd/reva/ls.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"os"
"path"

rpcpb "github.com/cs3org/go-cs3apis/cs3/rpc"
storageproviderv0alphapb "github.com/cs3org/go-cs3apis/cs3/storageprovider/v0alpha"
)

Expand Down Expand Up @@ -56,6 +57,10 @@ func lsCommand() *command {
return err
}

if res.Status.Code != rpcpb.Code_CODE_OK {
return formatError(res.Status)
}

infos := res.Infos
for _, info := range infos {
p := info.Path
Expand Down
25 changes: 24 additions & 1 deletion cmd/reva/share-list.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,22 @@
package main

import (
"fmt"
"os"
"strings"
"time"

rpcpb "github.com/cs3org/go-cs3apis/cs3/rpc"
storageproviderv0alphapb "github.com/cs3org/go-cs3apis/cs3/storageprovider/v0alpha"
usershareproviderv0alphapb "github.com/cs3org/go-cs3apis/cs3/usershareprovider/v0alpha"
"github.com/jedib0t/go-pretty/table"
)

func shareListCommand() *command {
cmd := newCommand("share-list")
cmd.Description = func() string { return "list shares you manage" }
cmd.Usage = func() string { return "Usage: share list [-flags]" }
cmd.Usage = func() string { return "Usage: share-list [-flags]" }
resID := cmd.String("by-resource-id", "", "filter by resource id (storage_id:opaque_id)")
cmd.Action = func() error {
ctx := getAuthContext()
shareClient, err := getUserShareProviderClient()
Expand All @@ -39,6 +43,25 @@ func shareListCommand() *command {
}

shareRequest := &usershareproviderv0alphapb.ListSharesRequest{}
if *resID != "" {
// check split by colon (:)
tokens := strings.Split(*resID, ":")
if len(tokens) != 2 {
return fmt.Errorf("resource id invalid")
}
id := &storageproviderv0alphapb.ResourceId{
StorageId: tokens[0],
OpaqueId: tokens[1],
}
shareRequest.Filters = []*usershareproviderv0alphapb.ListSharesRequest_Filter{
&usershareproviderv0alphapb.ListSharesRequest_Filter{
Type: usershareproviderv0alphapb.ListSharesRequest_Filter_LIST_SHARES_REQUEST_FILTER_TYPE_RESOURCE_ID,
Term: &usershareproviderv0alphapb.ListSharesRequest_Filter_ResourceId{
ResourceId: id,
},
},
}
}

shareRes, err := shareClient.ListShares(ctx, shareRequest)
if err != nil {
Expand Down
1 change: 1 addition & 0 deletions cmd/revad/gateway.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ authsvc = "localhost:9999"
usershareprovidersvc = "localhost:9999"
appregistrysvc = "localhost:9999"
preferencessvc = "localhost:9999"
commit_share_to_storage_grant = true

[http]
enabled_services = ["ocdavsvc"]
Expand Down
2 changes: 1 addition & 1 deletion cmd/revad/svcs/grpcsvcs/appregistrysvc/appregistrysvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func (s *svc) ListAppProviders(ctx context.Context, req *appregistryv0alphapb.Li
}
return res, nil
}
providers := make([]*appregistryv0alphapb.ProviderInfo, len(pvds))
providers := make([]*appregistryv0alphapb.ProviderInfo, 0, len(pvds))
for _, pvd := range pvds {
providers = append(providers, format(pvd))
}
Expand Down
5 changes: 3 additions & 2 deletions cmd/revad/svcs/grpcsvcs/gatewaysvc/appprovidersvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
storageproviderv0alphapb "github.com/cs3org/go-cs3apis/cs3/storageprovider/v0alpha"
"github.com/cs3org/reva/cmd/revad/svcs/grpcsvcs/pool"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/errtypes"
"github.com/pkg/errors"
)

Expand All @@ -35,7 +36,7 @@ func (s *svc) Open(ctx context.Context, req *appproviderv0alphapb.OpenRequest) (
provider, err := s.findAppProvider(ctx, req.ResourceInfo)
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding app provider")
if _, ok := err.(*notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &appproviderv0alphapb.OpenResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -90,7 +91,7 @@ func (s *svc) findAppProvider(ctx context.Context, ri *storageproviderv0alphapb.
}

if res.Status.Code == rpcpb.Code_CODE_NOT_FOUND {
return nil, notFoundError("gatewaysvc: app provider not found for resource:" + ri.String())
return nil, errtypes.NotFound("gatewaysvc: app provider not found for resource:" + ri.String())
}

return nil, errors.New("gatewaysvc: error finding a storage provider")
Expand Down
2 changes: 2 additions & 0 deletions cmd/revad/svcs/grpcsvcs/gatewaysvc/gatewaysvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,6 @@ type config struct {
AppRegistryEndpoint string `mapstructure:"appregistrysvc"`
PreferencesEndpoint string `mapstructure:"preferencessvc"`
UserShareProviderEndpoint string `mapstructure:"usershareprovidersvc"`
CommitShareToStorageGrant bool `mapstructure:"commit_share_to_storage_grant"`
CommitShareToStorageRef bool `mapstructure:"commit_share_to_storage_ref"`
}
38 changes: 17 additions & 21 deletions cmd/revad/svcs/grpcsvcs/gatewaysvc/storageprovidersvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
storagetypespb "github.com/cs3org/go-cs3apis/cs3/storagetypes"
"github.com/cs3org/reva/cmd/revad/svcs/grpcsvcs/pool"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/errtypes"
"github.com/pkg/errors"
)

Expand All @@ -45,7 +46,7 @@ func (s *svc) InitiateFileDownload(ctx context.Context, req *storageproviderv0al
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.InitiateFileDownloadResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -87,7 +88,7 @@ func (s *svc) InitiateFileUpload(ctx context.Context, req *storageproviderv0alph
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.InitiateFileUploadResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -138,7 +139,7 @@ func (s *svc) CreateContainer(ctx context.Context, req *storageproviderv0alphapb
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.CreateContainerResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -180,7 +181,7 @@ func (s *svc) Delete(ctx context.Context, req *storageproviderv0alphapb.DeleteRe
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.DeleteResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -231,7 +232,7 @@ func (s *svc) Stat(ctx context.Context, req *storageproviderv0alphapb.StatReques
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.StatResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -277,7 +278,7 @@ func (s *svc) ListContainer(ctx context.Context, req *storageproviderv0alphapb.L
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.ListContainerResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -307,7 +308,7 @@ func (s *svc) ListContainer(ctx context.Context, req *storageproviderv0alphapb.L

res, err := c.ListContainer(ctx, req)
if err != nil {
return nil, errors.Wrap(err, "gatewaysvc: error calling Stat")
return nil, errors.Wrap(err, "gatewaysvc: error calling ListContainer")
}

return res, nil
Expand All @@ -319,7 +320,7 @@ func (s *svc) ListFileVersions(ctx context.Context, req *storageproviderv0alphap
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.ListFileVersionsResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -361,7 +362,7 @@ func (s *svc) RestoreFileVersion(ctx context.Context, req *storageproviderv0alph
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.RestoreFileVersionResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -436,7 +437,7 @@ func (s *svc) ListGrants(ctx context.Context, req *storageproviderv0alphapb.List
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.ListGrantsResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -478,7 +479,7 @@ func (s *svc) AddGrant(ctx context.Context, req *storageproviderv0alphapb.AddGra
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.AddGrantResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand All @@ -493,7 +494,7 @@ func (s *svc) AddGrant(ctx context.Context, req *storageproviderv0alphapb.AddGra
}, nil
}

log.Info().Str("address", pi.Address).Str("ref", req.Ref.String()).Msg("storage provider found")
log.Info().Str("address", pi.Address).Str("ref", req.Ref.String()).Str("provider", pi.String()).Msg("storage provider found")

// TODO(labkode): check for capabilities here
c, err := pool.GetStorageProviderServiceClient(pi.Address)
Expand All @@ -520,7 +521,7 @@ func (s *svc) UpdateGrant(ctx context.Context, req *storageproviderv0alphapb.Upd
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.UpdateGrantResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -562,7 +563,7 @@ func (s *svc) RemoveGrant(ctx context.Context, req *storageproviderv0alphapb.Rem
if err != nil {
log.Err(err).Msg("gatewaysvc: error finding storage provider")

if _, ok := err.(notFoundError); ok {
if _, ok := err.(errtypes.IsNotFound); ok {
return &storageproviderv0alphapb.RemoveGrantResponse{
Status: &rpcpb.Status{
Code: rpcpb.Code_CODE_NOT_FOUND,
Expand Down Expand Up @@ -623,18 +624,13 @@ func (s *svc) find(ctx context.Context, ref *storageproviderv0alphapb.Reference)
return nil, err
}

if res.Status.Code == rpcpb.Code_CODE_OK {
if res.Status.Code == rpcpb.Code_CODE_OK && res.Provider != nil {
return res.Provider, nil
}

if res.Status.Code == rpcpb.Code_CODE_NOT_FOUND {
return nil, notFoundError("gatewaysvc: storage provider not found for reference:" + ref.String())
return nil, errtypes.NotFound("gatewaysvc: storage provider not found for reference:" + ref.String())
}

return nil, errors.New("gatewaysvc: error finding a storage provider")
}

type notFoundError string

func (e notFoundError) Error() string { return string(e) }
func (e notFoundError) IsNotFound() {}

0 comments on commit c67e20d

Please sign in to comment.