MCPcopy
hub / github.com/NVIDIA/aistore / hpostCreateBucket

Method hpostCreateBucket

ais/proxy.go:1214–1278  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request, query url.Values, msg *apc.ActionMsg, bck *cluster.Bck)

Source from the content-addressed store, hash-verified

1212}
1213
1214func (p *proxy) hpostCreateBucket(w http.ResponseWriter, r *http.Request, query url.Values, msg *apc.ActionMsg, bck *cluster.Bck) {
1215 bucket := bck.Name
1216 if err := p.checkAccess(w, r, nil, apc.AceCreateBucket); err != nil {
1217 return
1218 }
1219 if err := bck.Validate(); err != nil {
1220 p.writeErr(w, r, err)
1221 return
1222 }
1223 if p.forwardCP(w, r, msg, bucket) {
1224 return
1225 }
1226 if bck.Provider == "" {
1227 bck.Provider = apc.ProviderAIS
1228 }
1229 if bck.IsHDFS() && msg.Value == nil {
1230 p.writeErr(w, r,
1231 errors.New("property 'extra.hdfs.ref_directory' must be specified when creating HDFS bucket"))
1232 return
1233 }
1234 if msg.Value != nil {
1235 propsToUpdate := cmn.BucketPropsToUpdate{}
1236 if err := cos.MorphMarshal(msg.Value, &propsToUpdate); err != nil {
1237 p.writeErrf(w, r, cmn.FmtErrMorphUnmarshal, p.si, msg.Action, msg.Value, err)
1238 return
1239 }
1240 // Make and validate new bucket props.
1241 bck.Props = defaultBckProps(bckPropsArgs{bck: bck})
1242 nprops, err := p.makeNewBckProps(bck, &propsToUpdate, true /*creating*/)
1243 if err != nil {
1244 p.writeErr(w, r, err)
1245 return
1246 }
1247 bck.Props = nprops
1248 if backend := bck.Backend(); backend != nil {
1249 if err := backend.Validate(); err != nil {
1250 p.writeErrf(w, r, "cannot create %s: invalid backend %s, err: %v", bck, backend, err)
1251 return
1252 }
1253 // Initialize backend bucket.
1254 if err := backend.InitNoBackend(p.owner.bmd); err != nil {
1255 if !cmn.IsErrRemoteBckNotFound(err) {
1256 p.writeErrf(w, r, "cannot create %s: failing to initialize backend %s, err: %v",
1257 bck, backend, err)
1258 return
1259 }
1260 args := bckInitArgs{p: p, w: w, r: r, bck: backend, msg: msg, query: query}
1261 args.createAIS = false
1262 args.headRemB = true
1263 if _, err = args.try(); err != nil {
1264 return
1265 }
1266 }
1267 }
1268 // Send full props to the target. Required for HDFS provider.
1269 msg.Value = bck.Props
1270 }
1271 if err := p.createBucket(msg, bck); err != nil {

Callers 1

hpostBucketMethod · 0.95

Calls 15

checkAccessMethod · 0.95
forwardCPMethod · 0.95
makeNewBckPropsMethod · 0.95
tryMethod · 0.95
createBucketMethod · 0.95
MorphMarshalFunction · 0.92
IsErrRemoteBckNotFoundFunction · 0.92
writeErrMethod · 0.80
writeErrfMethod · 0.80
InitNoBackendMethod · 0.80
defaultBckPropsFunction · 0.70
ValidateMethod · 0.65

Tested by

no test coverage detected