]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #62710 from bill-scales/ec_backfill
authorLaura Flores <lflores@redhat.com>
Wed, 23 Apr 2025 15:06:56 +0000 (10:06 -0500)
committerGitHub <noreply@github.com>
Wed, 23 Apr 2025 15:06:56 +0000 (10:06 -0500)
osd: EC Optimizations: Backfill changes for partial writes

1  2 
src/crimson/osd/CMakeLists.txt
src/crimson/osd/pg_recovery.cc
src/crimson/osd/recovery_backend.cc
src/osd/PG.h

Simple merge
Simple merge
index f30d34195aa25fa1ec3693de543dfff00cf5262d,81174e2ba471f7f7658d4cea596640e9e0bf71a7..67b998338e3f3a56342421bf406bfa610d3a8e20
@@@ -228,32 -290,21 +290,34 @@@ RecoveryBackend::scan_for_backfill_repl
    [[maybe_unused]] const std::int64_t min,
    const std::int64_t max)
  {
-   LOG_PREFIX(RecoveryBackend::scan_for_backfill);
+   LOG_PREFIX(RecoveryBackend::scan_for_backfill_replica);
    DEBUGDPP("starting from {}", pg, start);
-   auto version_map = seastar::make_lw_shared<std::map<hobject_t, eversion_t>>();
+   auto version_map = seastar::make_lw_shared<std::map<hobject_t,
+                                                     eversion_t>>();
    auto&& [objects, next] = co_await backend->list_objects(start, max);
-   co_await interruptor::parallel_for_each(objects, seastar::coroutine::lambda([FNAME, this, version_map]
+   co_await interruptor::parallel_for_each(objects,
+     seastar::coroutine::lambda([FNAME, this, version_map]
      (const hobject_t& object) -> interruptible_future<> {
      DEBUGDPP("querying obj:{}", pg, object);
 -    auto obc_manager = pg.obc_loader.get_obc_manager(object);
 -    co_await pg.obc_loader.load_and_lock(
 +    auto obc_manager = pg.obc_loader.get_obc_manager(
 +      object, /* resolve_clone = */ false);
 +
 +    auto found = co_await pg.obc_loader.load_and_lock(
        obc_manager, RWState::RWREAD
 -    ).handle_error_interruptible(
 +    ).si_then([] {
 +      return true;
 +    }).handle_error_interruptible(
 +      crimson::ct_error::enoent::handle([](auto) {
 +      return false;
 +      }),
        crimson::ct_error::assert_all("unexpected error")
      );
 +    if (!found) {
 +      // if the object does not exist here, it must have been removed
 +      // between the collection_list_partial and here.  This can happen
 +      // for the first item in the range, which is usually last_backfill.
 +      co_return;
 +    }
  
      if (obc_manager.get_obc()->obs.exists) {
        auto version = obc_manager.get_obc()->obs.oi.version;
diff --cc src/osd/PG.h
Simple merge