DELETE { action } /v1/buckets
(w http.ResponseWriter, r *http.Request)
| 695 | |
| 696 | // DELETE { action } /v1/buckets |
| 697 | func (p *proxy) httpbckdelete(w http.ResponseWriter, r *http.Request) { |
| 698 | // 1. request |
| 699 | apireq := apiReqAlloc(1, apc.URLPathBuckets.L, false) |
| 700 | defer apiReqFree(apireq) |
| 701 | if err := p.parseReq(w, r, apireq); err != nil { |
| 702 | return |
| 703 | } |
| 704 | msg, err := p.readActionMsg(w, r) |
| 705 | if err != nil { |
| 706 | return |
| 707 | } |
| 708 | perms := apc.AceDestroyBucket |
| 709 | if msg.Action == apc.ActDeleteObjects || msg.Action == apc.ActEvictObjects { |
| 710 | perms = apc.AceObjDELETE |
| 711 | } |
| 712 | |
| 713 | // 2. bucket |
| 714 | bck := apireq.bck |
| 715 | bckArgs := bckInitArgs{p: p, w: w, r: r, msg: msg, perms: perms, bck: bck, dpq: apireq.dpq, query: apireq.query} |
| 716 | bckArgs.createAIS = false |
| 717 | bckArgs.headRemB = true |
| 718 | if msg.Action == apc.ActEvictRemoteBck { |
| 719 | var errCode int |
| 720 | bckArgs.headRemB = false |
| 721 | bck, errCode, err = bckArgs.init(bck.Name) |
| 722 | if err != nil { |
| 723 | if errCode != http.StatusNotFound && !cmn.IsErrRemoteBckNotFound(err) { |
| 724 | p.writeErr(w, r, err, errCode) |
| 725 | } |
| 726 | return |
| 727 | } |
| 728 | } else if bck, err = bckArgs.initAndTry(bck.Name); err != nil { |
| 729 | return |
| 730 | } |
| 731 | |
| 732 | // 3. action |
| 733 | switch msg.Action { |
| 734 | case apc.ActEvictRemoteBck: |
| 735 | if !bck.IsRemote() { |
| 736 | p.writeErrf(w, r, fmtNotRemote, bck.Name) |
| 737 | return |
| 738 | } |
| 739 | keepMD := cos.IsParseBool(apireq.query.Get(apc.QparamKeepBckMD)) |
| 740 | // HDFS buckets will always keep metadata so they can re-register later |
| 741 | if bck.IsHDFS() || keepMD { |
| 742 | if err := p.destroyBucketData(msg, bck); err != nil { |
| 743 | p.writeErr(w, r, err) |
| 744 | } |
| 745 | return |
| 746 | } |
| 747 | if p.forwardCP(w, r, msg, bck.Name) { |
| 748 | return |
| 749 | } |
| 750 | if err := p.destroyBucket(msg, bck); err != nil { |
| 751 | p.writeErr(w, r, err) |
| 752 | } |
| 753 | case apc.ActDestroyBck: |
| 754 | if p.forwardCP(w, r, msg, bck.Name) { |
no test coverage detected