(w http.ResponseWriter, r *http.Request, query url.Values, msg *apc.ActionMsg, bck *cluster.Bck)
| 1212 | } |
| 1213 | |
| 1214 | func (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 { |
no test coverage detected