(w http.ResponseWriter, r *http.Request, msg *apc.ActionMsg, bucket string)
| 1005 | } |
| 1006 | |
| 1007 | func (p *proxy) hpostBucket(w http.ResponseWriter, r *http.Request, msg *apc.ActionMsg, bucket string) { |
| 1008 | query := r.URL.Query() |
| 1009 | bck, err := newBckFromQ(bucket, query, nil) |
| 1010 | if err != nil { |
| 1011 | p.writeErr(w, r, err) |
| 1012 | return |
| 1013 | } |
| 1014 | if bck.IsRemoteAIS() { |
| 1015 | // forward to remote AIS as is, with distinct exception |
| 1016 | switch msg.Action { |
| 1017 | case apc.ActInvalListCache: |
| 1018 | default: |
| 1019 | p.reverseReqRemote(w, r, msg, bck.Bucket()) |
| 1020 | return |
| 1021 | } |
| 1022 | } |
| 1023 | if msg.Action == apc.ActCreateBck { |
| 1024 | p.hpostCreateBucket(w, r, query, msg, bck) |
| 1025 | return |
| 1026 | } |
| 1027 | |
| 1028 | // only the primary can do metasync |
| 1029 | xactRecord := xact.Table[msg.Action] |
| 1030 | if xactRecord.Metasync { |
| 1031 | if p.forwardCP(w, r, msg, bucket) { |
| 1032 | return |
| 1033 | } |
| 1034 | } |
| 1035 | |
| 1036 | // Initialize bucket; if doesn't exist try creating it on the fly |
| 1037 | // but only if it's a remote bucket (and user did not explicitly disallowed). |
| 1038 | bckArgs := bckInitArgs{p: p, w: w, r: r, bck: bck, msg: msg, query: query} |
| 1039 | bckArgs.createAIS = false |
| 1040 | bckArgs.headRemB = shouldHeadRemB() |
| 1041 | if bck, err = bckArgs.initAndTry(bck.Name); err != nil { |
| 1042 | return |
| 1043 | } |
| 1044 | |
| 1045 | // |
| 1046 | // {action} on bucket |
| 1047 | // |
| 1048 | switch msg.Action { |
| 1049 | case apc.ActMoveBck: |
| 1050 | bckFrom := bck |
| 1051 | bckTo, err := newBckFromQuname(query, true /*required*/) |
| 1052 | if err != nil { |
| 1053 | p.writeErr(w, r, err) |
| 1054 | return |
| 1055 | } |
| 1056 | if !bckFrom.IsAIS() && bckFrom.Backend() == nil { |
| 1057 | p.writeErrf(w, r, "source bucket %q must be an AIS bucket", bckFrom) |
| 1058 | return |
| 1059 | } |
| 1060 | if bckTo.IsRemote() { |
| 1061 | p.writeErrf(w, r, "destination bucket %q must be an AIS bucket", bckTo) |
| 1062 | return |
| 1063 | } |
| 1064 | if bckFrom.Name == bckTo.Name { |
no test coverage detected