From: Kefu Chai Date: Tue, 17 Sep 2019 16:10:19 +0000 (+0800) Subject: crimson/osd: return hobject_t from pgls_filter() X-Git-Tag: v15.1.0~1510^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d7be213b8c3d6fe443a4b14c02461bb422e751c7;p=ceph.git crimson/osd: return hobject_t from pgls_filter() so we can use it as the mapper function in seastar::map_reduce(). Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 345d7d52b225..d3d009c4b1dd 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -159,7 +159,7 @@ static inline std::unique_ptr get_pgls_filter( return filter; } -static seastar::future pgls_filter( +static seastar::future pgls_filter( const PGLSFilter& filter, const PGBackend& backend, const hobject_t& sobj) @@ -175,15 +175,15 @@ static seastar::future pgls_filter( if (!futval.failed()) { val.push_back(std::move(futval).get0()); } else if (filter.reject_empty_xattr()) { - return seastar::make_ready_future(false, sobj); + return seastar::make_ready_future(hobject_t{}); } const bool filtered = filter.filter(sobj, val); - return seastar::make_ready_future(filtered, sobj); + return seastar::make_ready_future(filtered ? sobj : hobject_t{}); }); } else { ceph::bufferlist empty_lvalue_bl; const bool filtered = filter.filter(sobj, empty_lvalue_bl); - return seastar::make_ready_future(filtered, sobj); + return seastar::make_ready_future(filtered ? sobj : hobject_t{}); } } @@ -227,7 +227,7 @@ static seastar::future do_pgnls_common( if (filter) { return pgls_filter(*filter, backend, obj); } else { - return seastar::make_ready_future(true, obj); + return seastar::make_ready_future(obj); } }; @@ -244,13 +244,11 @@ static seastar::future do_pgnls_common( std::move(items), std::move(next)); }); }).then( - [pg_end, filter] (const std::vector>& items, auto next) { - auto is_matched = [] (const auto& item) { - return std::get(item); + [pg_end, filter] (const std::vector& items, auto next) { + auto is_matched = [] (const auto& obj) { + return !obj.is_min(); }; - auto to_entry = [] (const auto& item) { - const auto& obj = std::get(item); + auto to_entry = [] (const auto& obj) { return librados::ListObjectImpl{ obj.get_namespace(), obj.oid.name, obj.get_key() };