HEAD /v1/buckets/bucket-name
(w http.ResponseWriter, r *http.Request)
| 852 | |
| 853 | // HEAD /v1/buckets/bucket-name |
| 854 | func (t *target) httpbckhead(w http.ResponseWriter, r *http.Request) { |
| 855 | var ( |
| 856 | bucketProps cos.SimpleKVs |
| 857 | err error |
| 858 | code int |
| 859 | ctx = context.Background() |
| 860 | hdr = w.Header() |
| 861 | ) |
| 862 | apireq := apiReqAlloc(1, apc.URLPathBuckets.L, false) |
| 863 | defer apiReqFree(apireq) |
| 864 | if err = t.parseReq(w, r, apireq); err != nil { |
| 865 | return |
| 866 | } |
| 867 | inBMD := true |
| 868 | if err = apireq.bck.Init(t.owner.bmd); err != nil { |
| 869 | if !cmn.IsErrRemoteBckNotFound(err) { // is ais |
| 870 | t.writeErr(w, r, err) |
| 871 | return |
| 872 | } |
| 873 | inBMD = false |
| 874 | } |
| 875 | if glog.FastV(4, glog.SmoduleAIS) { |
| 876 | pid := apireq.query.Get(apc.QparamProxyID) |
| 877 | glog.Infof("%s %s <= %s", r.Method, apireq.bck, pid) |
| 878 | } |
| 879 | |
| 880 | debug.Assert(!apireq.bck.IsAIS()) |
| 881 | |
| 882 | if apireq.bck.IsHTTP() { |
| 883 | originalURL := apireq.query.Get(apc.QparamOrigURL) |
| 884 | ctx = context.WithValue(ctx, cos.CtxOriginalURL, originalURL) |
| 885 | if !inBMD && originalURL == "" { |
| 886 | err = cmn.NewErrRemoteBckNotFound(apireq.bck.Bucket()) |
| 887 | t.writeErrSilent(w, r, err, http.StatusNotFound) |
| 888 | return |
| 889 | } |
| 890 | } |
| 891 | // + cloud |
| 892 | bucketProps, code, err = t.Backend(apireq.bck).HeadBucket(ctx, apireq.bck) |
| 893 | if err != nil { |
| 894 | if !inBMD { |
| 895 | if code == http.StatusNotFound { |
| 896 | err = cmn.NewErrRemoteBckNotFound(apireq.bck.Bucket()) |
| 897 | t.writeErrSilent(w, r, err, code) |
| 898 | } else { |
| 899 | err = cmn.NewErrFailedTo(t, "HEAD remote", apireq.bck, err, code) |
| 900 | if cos.IsParseBool(apireq.query.Get(apc.QparamSilent)) { |
| 901 | t.writeErrSilent(w, r, err, code) |
| 902 | } else { |
| 903 | t.writeErr(w, r, err, code) |
| 904 | } |
| 905 | } |
| 906 | return |
| 907 | } |
| 908 | glog.Warningf("%s: bucket %s, err: %v(%d)", t, apireq.bck, err, code) |
| 909 | bucketProps = make(cos.SimpleKVs) |
| 910 | bucketProps[apc.HdrBackendProvider] = apireq.bck.Provider |
| 911 | bucketProps[apc.HdrRemoteOffline] = strconv.FormatBool(apireq.bck.IsRemote()) |
no test coverage detected