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

Method httpobjput

ais/proxy.go:587–664  ·  view source on GitHub ↗

PUT /v1/objects/bucket-name/object-name

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

Source from the content-addressed store, hash-verified

585
586// PUT /v1/objects/bucket-name/object-name
587func (p *proxy) httpobjput(w http.ResponseWriter, r *http.Request) {
588 var (
589 nodeID string
590 perms apc.AccessAttrs
591 )
592 // 1. request
593 apireq := apiReqAlloc(2, apc.URLPathObjects.L, true /*dpq*/)
594 if err := p.parseReq(w, r, apireq); err != nil {
595 apiReqFree(apireq)
596 return
597 }
598 appendTyProvided := apireq.dpq.appendTy != "" // apc.QparamAppendType
599 if !appendTyProvided {
600 perms = apc.AcePUT
601 } else {
602 hi, err := parseAppendHandle(apireq.dpq.appendHdl) // apc.QparamAppendHandle
603 if err != nil {
604 apiReqFree(apireq)
605 p.writeErr(w, r, err)
606 return
607 }
608 nodeID = hi.nodeID
609 perms = apc.AceAPPEND
610 }
611
612 // 2. bucket
613 bckArgs := allocInitBckArgs()
614 {
615 bckArgs.p = p
616 bckArgs.w = w
617 bckArgs.r = r
618 bckArgs.perms = perms
619 bckArgs.createAIS = false
620 bckArgs.headRemB = shouldHeadRemB()
621 }
622 bckArgs.bck, bckArgs.dpq = apireq.bck, apireq.dpq
623 bck, err := bckArgs.initAndTry(apireq.bck.Name)
624 freeInitBckArgs(bckArgs)
625
626 objName := apireq.items[1]
627 apiReqFree(apireq)
628 if err != nil {
629 return
630 }
631
632 // 3. redirect
633 var (
634 si *cluster.Snode
635 smap = p.owner.smap.get()
636 started = time.Now()
637 )
638 if nodeID == "" {
639 si, err = cluster.HrwTarget(bck.MakeUname(objName), &smap.Smap)
640 if err != nil {
641 p.writeErr(w, r, err)
642 return
643 }
644 } else {

Callers 1

objectHandlerMethod · 0.95

Calls 15

redirectURLMethod · 0.95
HrwTargetFunction · 0.92
FastVFunction · 0.92
InfofFunction · 0.92
apiReqAllocFunction · 0.85
apiReqFreeFunction · 0.85
parseAppendHandleFunction · 0.85
allocInitBckArgsFunction · 0.85
shouldHeadRemBFunction · 0.85
freeInitBckArgsFunction · 0.85
parseReqMethod · 0.80
writeErrMethod · 0.80

Tested by

no test coverage detected