GET /v1/objects/bucket-name/object-name
(w http.ResponseWriter, r *http.Request, origURLBck ...string)
| 535 | |
| 536 | // GET /v1/objects/bucket-name/object-name |
| 537 | func (p *proxy) httpobjget(w http.ResponseWriter, r *http.Request, origURLBck ...string) { |
| 538 | // 1. request |
| 539 | apireq := apiReqAlloc(2, apc.URLPathObjects.L, true /*dpq*/) |
| 540 | if err := p.parseReq(w, r, apireq); err != nil { |
| 541 | apiReqFree(apireq) |
| 542 | return |
| 543 | } |
| 544 | |
| 545 | // 2. bucket |
| 546 | bckArgs := allocInitBckArgs() |
| 547 | { |
| 548 | bckArgs.p = p |
| 549 | bckArgs.w = w |
| 550 | bckArgs.r = r |
| 551 | bckArgs.bck = apireq.bck |
| 552 | bckArgs.dpq = apireq.dpq |
| 553 | bckArgs.perms = apc.AceGET |
| 554 | bckArgs.createAIS = false |
| 555 | bckArgs.headRemB = shouldHeadRemB() |
| 556 | } |
| 557 | if len(origURLBck) > 0 { |
| 558 | bckArgs.origURLBck = origURLBck[0] |
| 559 | } |
| 560 | bck, err := bckArgs.initAndTry(apireq.bck.Name) |
| 561 | freeInitBckArgs(bckArgs) |
| 562 | |
| 563 | objName := apireq.items[1] |
| 564 | apiReqFree(apireq) |
| 565 | if err != nil { |
| 566 | return |
| 567 | } |
| 568 | |
| 569 | // 3. redirect |
| 570 | smap := p.owner.smap.get() |
| 571 | si, err := cluster.HrwTarget(bck.MakeUname(objName), &smap.Smap) |
| 572 | if err != nil { |
| 573 | p.writeErr(w, r, err) |
| 574 | return |
| 575 | } |
| 576 | if glog.FastV(4, glog.SmoduleAIS) { |
| 577 | glog.Infof("%s %s/%s => %s", r.Method, bck.Name, objName, si) |
| 578 | } |
| 579 | redirectURL := p.redirectURL(r, si, time.Now() /*started*/, cmn.NetIntraData) |
| 580 | http.Redirect(w, r, redirectURL, http.StatusMovedPermanently) |
| 581 | |
| 582 | // 4. stats |
| 583 | p.statsT.Add(stats.GetCount, 1) |
| 584 | } |
| 585 | |
| 586 | // PUT /v1/objects/bucket-name/object-name |
| 587 | func (p *proxy) httpobjput(w http.ResponseWriter, r *http.Request) { |
no test coverage detected