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

Function ProxyRemoveSortHandler

dsort/handler.go:265–325  ·  view source on GitHub ↗

DELETE /v1/sort

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

263
264// DELETE /v1/sort
265func ProxyRemoveSortHandler(w http.ResponseWriter, r *http.Request) {
266 if !checkHTTPMethod(w, r, http.MethodDelete) {
267 return
268 }
269 _, err := checkRESTItems(w, r, 0, apc.URLPathdSort.L)
270 if err != nil {
271 return
272 }
273
274 var (
275 smap = ctx.smapOwner.Get()
276 query = r.URL.Query()
277 managerUUID = query.Get(apc.QparamUUID)
278 path = apc.URLPathdSortMetrics.Join(managerUUID)
279 responses = broadcastTargets(http.MethodGet, path, nil, nil, smap)
280 )
281
282 // First, broadcast to see if process is cleaned up first
283 seenOne := false
284 for _, resp := range responses {
285 if resp.statusCode == http.StatusNotFound {
286 // Probably new target which does not know anything about this dsort op.
287 continue
288 }
289 if resp.err != nil {
290 cmn.WriteErr(w, r, resp.err, resp.statusCode)
291 return
292 }
293 metrics := &Metrics{}
294 if err := js.Unmarshal(resp.res, &metrics); err != nil {
295 cmn.WriteErr(w, r, err, http.StatusInternalServerError)
296 return
297 }
298 if !metrics.Archived.Load() {
299 cmn.WriteErrMsg(w, r, fmt.Sprintf("%s process %s still in progress and cannot be removed",
300 DSortName, managerUUID))
301 return
302 }
303 seenOne = true
304 }
305 if !seenOne {
306 s := fmt.Sprintf("invalid request: job %q does not exist", managerUUID)
307 cmn.WriteErrMsg(w, r, s, http.StatusNotFound)
308 return
309 }
310
311 // Next, broadcast the remove once we've checked that all targets have run cleanup
312 path = apc.URLPathdSortRemove.Join(managerUUID)
313 responses = broadcastTargets(http.MethodDelete, path, nil, nil, smap)
314 var failed []string // nolint:prealloc // will remain not allocated when no errors
315 for _, r := range responses {
316 if r.statusCode == http.StatusOK {
317 continue
318 }
319 failed = append(failed, fmt.Sprintf("%v: (%v) %v", r.si.ID(), r.statusCode, string(r.res)))
320 }
321 if len(failed) != 0 {
322 err := fmt.Errorf("got errors while broadcasting remove: %v", failed)

Callers 1

dsortHandlerMethod · 0.92

Calls 9

WriteErrFunction · 0.92
WriteErrMsgFunction · 0.92
checkHTTPMethodFunction · 0.85
broadcastTargetsFunction · 0.85
JoinMethod · 0.80
checkRESTItemsFunction · 0.70
GetMethod · 0.65
IDMethod · 0.65
LoadMethod · 0.45

Tested by

no test coverage detected