#include "common/Checksummer.h"
#include "common/Clock.h"
+#include "crimson/common/coroutine.h"
#include "crimson/common/exception.h"
#include "crimson/common/tmap_helpers.h"
#include "crimson/os/futurized_collection.h"
{
auto gstart = start.is_min() ? ghobject_t{} : ghobject_t{start, 0, shard};
auto gend = end.is_max() ? ghobject_t::get_max() : ghobject_t{end, 0, shard};
- return interruptor::make_interruptible(store->list_objects(coll,
- gstart,
- gend,
- limit))
- .then_interruptible([](auto ret) {
- auto& [gobjects, next] = ret;
- std::vector<hobject_t> objects;
- boost::copy(gobjects |
- boost::adaptors::filtered([](const ghobject_t& o) {
- if (o.is_pgmeta()) {
- return false;
- } else if (o.hobj.is_temp()) {
- return false;
- } else {
- return o.is_no_gen();
- }
- }) |
- boost::adaptors::transformed([](const ghobject_t& o) {
- return o.hobj;
- }),
- std::back_inserter(objects));
- return seastar::make_ready_future<std::tuple<std::vector<hobject_t>, hobject_t>>(
- std::make_tuple(objects, next.hobj));
- });
+ auto [gobjects, next] = co_await interruptor::make_interruptible(
+ store->list_objects(coll, gstart, gend, limit));
+
+ std::vector<hobject_t> objects;
+ boost::copy(
+ gobjects |
+ boost::adaptors::filtered([](const ghobject_t& o) {
+ if (o.is_pgmeta()) {
+ return false;
+ } else if (o.hobj.is_temp()) {
+ return false;
+ } else {
+ return o.is_no_gen();
+ }
+ }) |
+ boost::adaptors::transformed([](const ghobject_t& o) {
+ return o.hobj;
+ }),
+ std::back_inserter(objects));
+ co_return std::make_tuple(objects, next.hobj);
}
PGBackend::setxattr_ierrorator::future<> PGBackend::setxattr(