using list_iertr = OnodeManager::list_onodes_iertr;
using repeat_ret = list_iertr::future<seastar::stop_iteration>;
return trans_intr::repeat(
- [this, &t, &ret, &limit,
+ [this, &t, &ret, &limit, end,
filter, ranges = get_ranges(ch, start, end, filter)
]() mutable -> repeat_ret {
if (limit == 0 || ranges.empty()) {
DEBUGT("pstart {}, pend {}, limit {}", t, pstart, pend, limit);
return onode_manager->list_onodes(
t, pstart, pend, limit
- ).si_then([&limit, &ret, pend](auto &&_ret) mutable {
+ ).si_then([&limit, &ret, pend, &t, last=ranges.empty(), end]
+ (auto &&_ret) mutable {
auto &next_objects = std::get<0>(_ret);
auto &ret_objects = std::get<0>(ret);
ret_objects.insert(
std::get<1>(ret) = std::get<1>(_ret);
assert(limit >= next_objects.size());
limit -= next_objects.size();
+ LOG_PREFIX(SeaStore::list_objects);
+ DEBUGT("got {} objects, left limit {}",
+ t, next_objects.size(), limit);
+ if (last && std::get<1>(ret) == pend) {
+ std::get<1>(ret) = end;
+ }
assert(limit == 0 ||
std::get<1>(ret) == pend ||
std::get<1>(ret) == ghobject_t::get_max());
EXPECT_GE(next, right_bound);
} else {
// next <= *correct_end since *correct_end is the next object to list
- EXPECT_LE(next, *correct_end);
+ EXPECT_LE(listed.back(), *correct_end);
// next > *(correct_end - 1) since we already listed it
EXPECT_GT(next, *(correct_end - 1));
}