(bck *cmn.Bck, q url.Values)
| 2905 | } |
| 2906 | |
| 2907 | func (p *proxy) headRemoteBck(bck *cmn.Bck, q url.Values) (header http.Header, statusCode int, err error) { |
| 2908 | var ( |
| 2909 | tsi *cluster.Snode |
| 2910 | path = apc.URLPathBuckets.Join(bck.Name) |
| 2911 | ) |
| 2912 | if tsi, err = p.owner.smap.get().GetRandTarget(); err != nil { |
| 2913 | return |
| 2914 | } |
| 2915 | if bck.IsCloud() { |
| 2916 | config := cmn.GCO.Get() |
| 2917 | if _, ok := config.Backend.Providers[bck.Provider]; !ok { |
| 2918 | err = &cmn.ErrMissingBackend{Provider: bck.Provider} |
| 2919 | statusCode = http.StatusNotFound |
| 2920 | err = cmn.NewErrFailedTo(p, "lookup Cloud bucket", bck, err, statusCode) |
| 2921 | return |
| 2922 | } |
| 2923 | } |
| 2924 | q = bck.AddToQuery(q) |
| 2925 | cargs := allocCargs() |
| 2926 | { |
| 2927 | cargs.si = tsi |
| 2928 | cargs.req = cmn.HreqArgs{Method: http.MethodHead, Base: tsi.URL(cmn.NetIntraData), Path: path, Query: q} |
| 2929 | cargs.timeout = apc.DefaultTimeout |
| 2930 | } |
| 2931 | res := p.call(cargs) |
| 2932 | if res.status == http.StatusNotFound { |
| 2933 | err = cmn.NewErrRemoteBckNotFound(bck) |
| 2934 | } else if res.status == http.StatusGone { |
| 2935 | err = cmn.NewErrRemoteBckOffline(bck) |
| 2936 | } else { |
| 2937 | err = res.err |
| 2938 | header = res.header |
| 2939 | } |
| 2940 | statusCode = res.status |
| 2941 | freeCargs(cargs) |
| 2942 | freeCR(res) |
| 2943 | return |
| 2944 | } |
| 2945 | |
| 2946 | ////////////////// |
| 2947 | // reverseProxy // |
no test coverage detected