httpbck* handlers // GET /v1/buckets[/bucket-name]
(w http.ResponseWriter, r *http.Request)
| 541 | |
| 542 | // GET /v1/buckets[/bucket-name] |
| 543 | func (t *target) httpbckget(w http.ResponseWriter, r *http.Request) { |
| 544 | var bckName string |
| 545 | apiItems, err := t.checkRESTItems(w, r, 0, true, apc.URLPathBuckets.L) |
| 546 | if err != nil { |
| 547 | return |
| 548 | } |
| 549 | msg, err := t.readAisMsg(w, r) |
| 550 | if err != nil { |
| 551 | return |
| 552 | } |
| 553 | t.ensureLatestBMD(msg, r) |
| 554 | |
| 555 | if len(apiItems) > 0 { |
| 556 | bckName = apiItems[0] |
| 557 | } |
| 558 | switch msg.Action { |
| 559 | case apc.ActList: |
| 560 | dpq := dpqAlloc() |
| 561 | if err := dpq.fromRawQ(r.URL.RawQuery); err != nil { |
| 562 | dpqFree(dpq) |
| 563 | t.writeErr(w, r, err) |
| 564 | return |
| 565 | } |
| 566 | qbck, err := newQbckFromQ(bckName, nil, dpq) |
| 567 | dpqFree(dpq) |
| 568 | if err != nil { |
| 569 | t.writeErr(w, r, err) |
| 570 | return |
| 571 | } |
| 572 | // list buckets if `qbck` is indeed a bucket-query |
| 573 | if !qbck.IsBucket() { |
| 574 | t.listBuckets(w, r, qbck) |
| 575 | return |
| 576 | } |
| 577 | bck := cluster.CloneBck((*cmn.Bck)(qbck)) |
| 578 | if err := bck.Init(t.owner.bmd); err != nil { |
| 579 | if cmn.IsErrRemoteBckNotFound(err) { |
| 580 | t.BMDVersionFixup(r) |
| 581 | err = bck.Init(t.owner.bmd) |
| 582 | } |
| 583 | if err != nil { |
| 584 | t.writeErr(w, r, err) |
| 585 | return |
| 586 | } |
| 587 | } |
| 588 | begin := mono.NanoTime() |
| 589 | if ok := t.listObjects(w, r, bck, msg); !ok { |
| 590 | return |
| 591 | } |
| 592 | delta := mono.SinceNano(begin) |
| 593 | t.statsT.AddMany( |
| 594 | cos.NamedVal64{Name: stats.ListCount, Value: 1}, |
| 595 | cos.NamedVal64{Name: stats.ListLatency, Value: delta}, |
| 596 | ) |
| 597 | case apc.ActSummaryBck: |
| 598 | var ( |
| 599 | bsumMsg apc.BckSummMsg |
| 600 | query = r.URL.Query() |
no test coverage detected