PATCH /v1/buckets/bucket-name
(w http.ResponseWriter, r *http.Request)
| 1593 | |
| 1594 | // PATCH /v1/buckets/bucket-name |
| 1595 | func (p *proxy) httpbckpatch(w http.ResponseWriter, r *http.Request) { |
| 1596 | var ( |
| 1597 | err error |
| 1598 | msg *apc.ActionMsg |
| 1599 | propsToUpdate cmn.BucketPropsToUpdate |
| 1600 | xactID string |
| 1601 | nprops *cmn.BucketProps // complete instance of bucket props with propsToUpdate changes |
| 1602 | ) |
| 1603 | apireq := apiReqAlloc(1, apc.URLPathBuckets.L, false) |
| 1604 | defer apiReqFree(apireq) |
| 1605 | if err = p.parseReq(w, r, apireq); err != nil { |
| 1606 | return |
| 1607 | } |
| 1608 | if msg, err = p.readActionMsg(w, r); err != nil { |
| 1609 | return |
| 1610 | } |
| 1611 | if err := cos.MorphMarshal(msg.Value, &propsToUpdate); err != nil { |
| 1612 | p.writeErrMsg(w, r, "invalid props-to-update value in apireq: "+msg.String()) |
| 1613 | return |
| 1614 | } |
| 1615 | if p.forwardCP(w, r, msg, "httpbckpatch") { |
| 1616 | return |
| 1617 | } |
| 1618 | bck, perms := apireq.bck, apc.AcePATCH |
| 1619 | if propsToUpdate.Access != nil { |
| 1620 | perms |= apc.AceBckSetACL |
| 1621 | } |
| 1622 | bckArgs := bckInitArgs{p: p, w: w, r: r, bck: bck, msg: msg, skipBackend: true, |
| 1623 | perms: perms, dpq: apireq.dpq, query: apireq.query} |
| 1624 | bckArgs.createAIS = false |
| 1625 | bckArgs.headRemB = shouldHeadRemB() |
| 1626 | if bck, err = bckArgs.initAndTry(bck.Name); err != nil { |
| 1627 | return |
| 1628 | } |
| 1629 | if err = _checkAction(msg, apc.ActSetBprops, apc.ActResetBprops); err != nil { |
| 1630 | p.writeErr(w, r, err) |
| 1631 | return |
| 1632 | } |
| 1633 | // make and validate new props |
| 1634 | if nprops, err = p.makeNewBckProps(bck, &propsToUpdate); err != nil { |
| 1635 | p.writeErr(w, r, err) |
| 1636 | return |
| 1637 | } |
| 1638 | if !nprops.BackendBck.IsEmpty() { |
| 1639 | // backend must exist |
| 1640 | backendBck := cluster.CloneBck(&nprops.BackendBck) |
| 1641 | args := bckInitArgs{p: p, w: w, r: r, bck: backendBck, msg: msg, dpq: apireq.dpq, query: apireq.query} |
| 1642 | args.createAIS = false |
| 1643 | args.headRemB = true |
| 1644 | if _, err = args.initAndTry(backendBck.Name); err != nil { |
| 1645 | return |
| 1646 | } |
| 1647 | // init and validate |
| 1648 | if err = p.initBackendProp(nprops); err != nil { |
| 1649 | p.writeErr(w, r, err) |
| 1650 | return |
| 1651 | } |
| 1652 | } |
no test coverage detected