Skip to content

Commit e1e8c29

Browse files
authored
Merge pull request #4868 from butonic/improve-metadata-client-log
improve metadata client errors
2 parents b5c3c67 + fc0d5bf commit e1e8c29

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Enhancement: Improve metadata client errors
2+
3+
We now return a more descripive error message when the metadata client cannot create a space because it already exists.
4+
5+
https://github.com/cs3org/reva/pull/4868

pkg/storage/utils/metadata/cs3.go

+23-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"bytes"
2323
"context"
2424
"errors"
25+
"fmt"
2526
"io"
2627
"net/http"
2728
"os"
@@ -107,6 +108,27 @@ func (cs3 *CS3) Init(ctx context.Context, spaceid string) (err error) {
107108
if err != nil {
108109
return err
109110
}
111+
112+
lsRes, err := client.ListStorageSpaces(ctx, &provider.ListStorageSpacesRequest{
113+
Filters: []*provider.ListStorageSpacesRequest_Filter{
114+
{
115+
Type: provider.ListStorageSpacesRequest_Filter_TYPE_ID,
116+
Term: &provider.ListStorageSpacesRequest_Filter_Id{
117+
Id: &provider.StorageSpaceId{OpaqueId: spaceid + "!" + spaceid},
118+
},
119+
},
120+
},
121+
})
122+
switch {
123+
case err != nil:
124+
return err
125+
case lsRes.Status.Code == rpc.Code_CODE_OK && len(lsRes.StorageSpaces) > 0:
126+
if len(lsRes.StorageSpaces) > 0 {
127+
cs3.SpaceRoot = lsRes.StorageSpaces[0].Root
128+
return nil
129+
}
130+
}
131+
110132
// FIXME change CS3 api to allow sending a space id
111133
cssr, err := client.CreateStorageSpace(ctx, &provider.CreateStorageSpaceRequest{
112134
Opaque: &types.Opaque{
@@ -127,8 +149,7 @@ func (cs3 *CS3) Init(ctx context.Context, spaceid string) (err error) {
127149
case cssr.Status.Code == rpc.Code_CODE_OK:
128150
cs3.SpaceRoot = cssr.StorageSpace.Root
129151
case cssr.Status.Code == rpc.Code_CODE_ALREADY_EXISTS:
130-
// TODO make CreateStorageSpace return existing space?
131-
cs3.SpaceRoot = &provider.ResourceId{SpaceId: spaceid, OpaqueId: spaceid}
152+
return errtypes.AlreadyExists(fmt.Sprintf("user %s does not have access to metadata space %s, but it exists", cs3.serviceUser.Id.OpaqueId, spaceid))
132153
default:
133154
return errtypes.NewErrtypeFromStatus(cssr.Status)
134155
}

0 commit comments

Comments
 (0)