MCPcopy
hub / github.com/NVIDIA/aistore / reverseHandler

Method reverseHandler

ais/proxy.go:2211–2267  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

2209}
2210
2211func (p *proxy) reverseHandler(w http.ResponseWriter, r *http.Request) {
2212 apiItems, err := p.checkRESTItems(w, r, 1, false, apc.URLPathReverse.L)
2213 if err != nil {
2214 return
2215 }
2216
2217 // rewrite URL path (removing `apc.Reverse`)
2218 r.URL.Path = cos.JoinWords(apc.Version, apiItems[0])
2219
2220 nodeID := r.Header.Get(apc.HdrNodeID)
2221 if nodeID == "" {
2222 p.writeErrMsg(w, r, "missing node ID")
2223 return
2224 }
2225 smap := p.owner.smap.get()
2226 si := smap.GetNode(nodeID)
2227
2228 // access control
2229 switch r.Method {
2230 case http.MethodGet:
2231 // must be consistent with httpdaeget, httpcluget
2232 err = p.checkAccess(w, r, nil, apc.AceShowCluster)
2233 case http.MethodPost:
2234 // (ditto) httpdaepost, httpclupost
2235 err = p.checkAccess(w, r, nil, apc.AceAdmin)
2236 case http.MethodPut, http.MethodDelete:
2237 // (ditto) httpdaeput/delete and httpcluput/delete
2238 err = p.checkAccess(w, r, nil, apc.AceAdmin)
2239 default:
2240 cmn.WriteErr405(w, r, http.MethodDelete, http.MethodGet, http.MethodPost, http.MethodPut)
2241 return
2242 }
2243 if err != nil {
2244 return
2245 }
2246
2247 // do
2248 if si != nil {
2249 p.reverseNodeRequest(w, r, si)
2250 return
2251 }
2252 // special case when the target self-removed itself from cluster map
2253 // after having lost all mountpaths.
2254 nodeURL := r.Header.Get(apc.HdrNodeURL)
2255 if nodeURL == "" {
2256 err = &errNodeNotFound{"cannot rproxy", nodeID, p.si, smap}
2257 p.writeErr(w, r, err, http.StatusNotFound)
2258 return
2259 }
2260 parsedURL, err := url.Parse(nodeURL)
2261 if err != nil {
2262 p.writeErrf(w, r, "%s: invalid URL %q for node %s", p.si, nodeURL, nodeID)
2263 return
2264 }
2265
2266 p.reverseRequest(w, r, nodeID, parsedURL)
2267}
2268

Callers

nothing calls this directly

Calls 13

checkAccessMethod · 0.95
reverseNodeRequestMethod · 0.95
reverseRequestMethod · 0.95
JoinWordsFunction · 0.92
WriteErr405Function · 0.92
checkRESTItemsMethod · 0.80
writeErrMsgMethod · 0.80
GetNodeMethod · 0.80
writeErrMethod · 0.80
ParseMethod · 0.80
writeErrfMethod · 0.80
GetMethod · 0.65

Tested by

no test coverage detected