]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Tweak block_generator<> to use transactors! jfw-libfdb-reverse-select 70054/head
authorJesse F. Williamson <jfw@ibm.com>
Tue, 14 Jul 2026 19:29:05 +0000 (12:29 -0700)
committerJesse F. Williamson <jfw@ibm.com>
Tue, 14 Jul 2026 19:29:05 +0000 (12:29 -0700)
A pleasant improvement to the implementation.

Signed-off-by: Jesse F. Williamson <jfw@ibm.com>
src/rgw/fdb/base.h
src/rgw/fdb/interface.h
src/test/rgw/test_fdb_ceph.cc

index 3efaad24b0340c7d82c456e1e80b16fa2bdea07c..877fce147786056924474b6938d33f2c598821fe 100644 (file)
@@ -811,7 +811,7 @@ inline future_value get_range_future_from_transaction(ceph::libfdb::transaction&
                     ));
 }
 
-inline std::vector<ceph::libfdb::select> locate_split_points(
+inline std::vector<ceph::libfdb::select> plan_split_ranges(
           ceph::libfdb::database_handle dbh, 
           ceph::libfdb::select selector, 
           const std::int64_t remote_chunk_size)
index c06d65dab070fd429aa8af7cd92a0ec8fdfdf4d0..eb1059da87a06d62600d541261ddd4871b588c29 100644 (file)
@@ -475,17 +475,15 @@ auto block_generator(ceph::libfdb::database_handle dbh, ceph::libfdb::select sel
  // we need real-world experience to tweak this further):
  const auto chunk_size = 4*(1024*1024);
 
- auto split_points = detail::locate_split_points(dbh, selector, chunk_size);
+ auto split_ranges = detail::plan_split_ranges(dbh, selector, chunk_size);
 
- // This can be paralellized, but early benchmarks didn't show it helping:
- for (const auto& sp : split_points) {
-    AssocT block;
-    for (auto&& p : pair_generator(dbh, sp)) {
-      block.emplace(std::move(p));
-    }
+ auto read_block = [txr = make_transactor(dbh)](const auto& range) {
+  return txr([&range](auto& txn) {
+   return pair_generator(txn, range) | std::ranges::to<AssocT>();
+  });
+ };
 
-    co_yield block;
- }
+ co_yield std::ranges::elements_of(split_ranges | std::views::transform(read_block));
 }
 
 } // namespace ceph::libfdb
index c9b5705c7c293c44ab824d2e81143c576e1e9270..25791d43daece867c9ffe75f7eebf1a4e195754c 100644 (file)
@@ -313,11 +313,11 @@ template <typename AssocT = boost::container::flat_map<std::string, std::string>
 auto tier_generator(ceph::libfdb::database_handle dbh, ceph::libfdb::select selector)
 -> std::generator<AssocT>
 {
- auto split_points = locate_split_points(dbh, selector);
+ auto split_ranges = plan_split_ranges(dbh, selector);
 
  const unsigned local_max_block = 2*2024; // vis-a-vis remote request max
 
- std::transform_reduce(std::begin(split_points), std::end(split_points),
+ std::transform_reduce(std::begin(split_ranges), std::end(split_ranges),
                       AssocT(),
 
                       [](auto&& lhs, auto&& rhs) {