@@ -695,7 +695,7 @@ SeaStore::Shard::list_objects(CollectionRef ch,
695
695
using list_iertr = OnodeManager::list_onodes_iertr;
696
696
using repeat_ret = list_iertr::future<seastar::stop_iteration>;
697
697
return trans_intr::repeat (
698
- [this , &t, &ret, &limit,
698
+ [this , &t, &ret, &limit, end,
699
699
filter, ranges = get_ranges (ch, start, end, filter)
700
700
]() mutable -> repeat_ret {
701
701
if (limit == 0 || ranges.empty ()) {
@@ -711,7 +711,8 @@ SeaStore::Shard::list_objects(CollectionRef ch,
711
711
DEBUGT (" pstart {}, pend {}, limit {}" , t, pstart, pend, limit);
712
712
return onode_manager->list_onodes (
713
713
t, pstart, pend, limit
714
- ).si_then ([&limit, &ret, pend](auto &&_ret) mutable {
714
+ ).si_then ([&limit, &ret, pend, &t, last=ranges.empty (), end]
715
+ (auto &&_ret) mutable {
715
716
auto &next_objects = std::get<0 >(_ret);
716
717
auto &ret_objects = std::get<0 >(ret);
717
718
ret_objects.insert (
@@ -721,6 +722,12 @@ SeaStore::Shard::list_objects(CollectionRef ch,
721
722
std::get<1 >(ret) = std::get<1 >(_ret);
722
723
assert (limit >= next_objects.size ());
723
724
limit -= next_objects.size ();
725
+ LOG_PREFIX (SeaStore::list_objects);
726
+ DEBUGT (" got {} objects, left limit {}" ,
727
+ t, next_objects.size (), limit);
728
+ if (last && std::get<1 >(ret) == pend) {
729
+ std::get<1 >(ret) = end;
730
+ }
724
731
assert (limit == 0 ||
725
732
std::get<1 >(ret) == pend ||
726
733
std::get<1 >(ret) == ghobject_t::get_max ());
0 commit comments