listObjects returns a list of objects in a bucket (with optional prefix).
(w http.ResponseWriter, r *http.Request, bck *cluster.Bck, actMsg *aisMsg)
| 630 | |
| 631 | // listObjects returns a list of objects in a bucket (with optional prefix). |
| 632 | func (t *target) listObjects(w http.ResponseWriter, r *http.Request, bck *cluster.Bck, actMsg *aisMsg) (ok bool) { |
| 633 | var msg *apc.ListObjsMsg |
| 634 | if err := cos.MorphMarshal(actMsg.Value, &msg); err != nil { |
| 635 | t.writeErrf(w, r, cmn.FmtErrMorphUnmarshal, t.si, actMsg.Action, actMsg.Value, err) |
| 636 | return |
| 637 | } |
| 638 | if !bck.IsAIS() && !msg.IsFlagSet(apc.LsPresent) { |
| 639 | maxCloudPageSize := t.Backend(bck).MaxPageSize() |
| 640 | if msg.PageSize > maxCloudPageSize { |
| 641 | t.writeErrf(w, r, "page size %d exceeds the supported maximum (%d)", msg.PageSize, maxCloudPageSize) |
| 642 | return false |
| 643 | } |
| 644 | if msg.PageSize == 0 { |
| 645 | msg.PageSize = maxCloudPageSize |
| 646 | } |
| 647 | } |
| 648 | debug.Assert(msg.PageSize != 0) |
| 649 | debug.Assert(cos.IsValidUUID(msg.UUID)) |
| 650 | |
| 651 | rns := xreg.RenewObjList(t, bck, msg.UUID, msg) |
| 652 | xctn := rns.Entry.Get() |
| 653 | // Double check that xaction has not gone before starting page read. |
| 654 | // Restart xaction if needed. |
| 655 | if rns.Err == xs.ErrGone { |
| 656 | rns = xreg.RenewObjList(t, bck, msg.UUID, msg) |
| 657 | xctn = rns.Entry.Get() |
| 658 | } |
| 659 | if rns.Err != nil { |
| 660 | t.writeErr(w, r, rns.Err) |
| 661 | return |
| 662 | } |
| 663 | if !rns.IsRunning() { |
| 664 | go xctn.Run(nil) |
| 665 | } |
| 666 | |
| 667 | resp := xctn.(*xs.ObjListXact).Do(msg) |
| 668 | if resp.Err != nil { |
| 669 | t.writeErr(w, r, resp.Err, resp.Status) |
| 670 | return false |
| 671 | } |
| 672 | |
| 673 | debug.Assert(resp.Status == http.StatusOK) |
| 674 | debug.Assert(resp.BckList.UUID != "") |
| 675 | |
| 676 | if fs.MarkerExists(fname.RebalanceMarker) || reb.IsActiveGFN() { |
| 677 | resp.BckList.Flags |= cmn.BckListFlagRebalance |
| 678 | } |
| 679 | |
| 680 | return t.writeMsgPack(w, r, resp.BckList, "list_objects") |
| 681 | } |
| 682 | |
| 683 | func (t *target) bsumm(w http.ResponseWriter, r *http.Request, q url.Values, action string, bck *cluster.Bck, msg *apc.BckSummMsg) { |
| 684 | var ( |
no test coverage detected