@@ -22,6 +22,7 @@ import (
22
22
"bytes"
23
23
"context"
24
24
"errors"
25
+ "fmt"
25
26
"io"
26
27
"net/http"
27
28
"os"
@@ -107,6 +108,27 @@ func (cs3 *CS3) Init(ctx context.Context, spaceid string) (err error) {
107
108
if err != nil {
108
109
return err
109
110
}
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
+
110
132
// FIXME change CS3 api to allow sending a space id
111
133
cssr , err := client .CreateStorageSpace (ctx , & provider.CreateStorageSpaceRequest {
112
134
Opaque : & types.Opaque {
@@ -127,8 +149,7 @@ func (cs3 *CS3) Init(ctx context.Context, spaceid string) (err error) {
127
149
case cssr .Status .Code == rpc .Code_CODE_OK :
128
150
cs3 .SpaceRoot = cssr .StorageSpace .Root
129
151
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 ))
132
153
default :
133
154
return errtypes .NewErrtypeFromStatus (cssr .Status )
134
155
}
0 commit comments