From a46a9b97f4059c74ef7d51197c00eea4735f1b37 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 24 Nov 2020 19:17:49 +0100 Subject: [PATCH] crimson/osd: add support for MOSDPGBackfillRemove at replicas. Signed-off-by: Radoslaw Zarzynski --- src/crimson/osd/osd.cc | 2 ++ src/crimson/osd/pg.h | 1 + src/crimson/osd/recovery_backend.cc | 21 +++++++++++++++++++++ src/crimson/osd/recovery_backend.h | 3 +++ 4 files changed, 27 insertions(+) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 430d8ed2ebb..cb0951aad70 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -651,6 +651,8 @@ seastar::future<> OSD::ms_dispatch(crimson::net::Connection* conn, MessageRef m) case MSG_OSD_PG_SCAN: [[fallthrough]]; case MSG_OSD_PG_BACKFILL: + [[fallthrough]]; + case MSG_OSD_PG_BACKFILL_REMOVE: return handle_recovery_subreq(conn, boost::static_pointer_cast(m)); case MSG_OSD_PG_LEASE: [[fallthrough]]; diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index f7db6ba6cda..61815b3311b 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -362,6 +362,7 @@ public: bool try_reserve_recovery_space( int64_t primary_num_bytes, int64_t local_num_bytes) final { + // TODO return true; } void unreserve_recovery_space() final {} diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index 9444379be17..91e4cc334c7 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -136,6 +136,25 @@ seastar::future<> RecoveryBackend::handle_backfill( } } +seastar::future<> RecoveryBackend::handle_backfill_remove( + MOSDPGBackfillRemove& m) +{ + logger().debug("{} m.ls=", __func__, m.ls); + assert(m.get_type() == MSG_OSD_PG_BACKFILL_REMOVE); + + ObjectStore::Transaction t; + for ([[maybe_unused]] const auto& [soid, ver] : m.ls) { + // TODO: the reserved space management. PG::try_reserve_recovery_space(). + t.remove(pg.get_collection_ref()->get_cid(), + ghobject_t(soid, ghobject_t::NO_GEN, pg.get_pg_whoami().shard)); + } + return shard_services.get_store().do_transaction( + pg.get_collection_ref(), std::move(t) + ).handle_exception([] (auto) { + ceph_abort_msg("this transaction shall not fail"); + }); +} + seastar::future RecoveryBackend::scan_for_backfill( const hobject_t& start, [[maybe_unused]] const std::int64_t min, @@ -274,6 +293,8 @@ seastar::future<> RecoveryBackend::handle_recovery_op( switch (m->get_header().type) { case MSG_OSD_PG_BACKFILL: return handle_backfill(*boost::static_pointer_cast(m)); + case MSG_OSD_PG_BACKFILL_REMOVE: + return handle_backfill_remove(*boost::static_pointer_cast(m)); case MSG_OSD_PG_SCAN: return handle_scan(*boost::static_pointer_cast(m)); default: diff --git a/src/crimson/osd/recovery_backend.h b/src/crimson/osd/recovery_backend.h index 89f242b2b0c..2bffaed6a64 100644 --- a/src/crimson/osd/recovery_backend.h +++ b/src/crimson/osd/recovery_backend.h @@ -12,6 +12,7 @@ #include "crimson/osd/shard_services.h" #include "messages/MOSDPGBackfill.h" +#include "messages/MOSDPGBackfillRemove.h" #include "messages/MOSDPGScan.h" #include "osd/recovery_types.h" #include "osd/osd_types.h" @@ -31,6 +32,8 @@ class RecoveryBackend { MOSDPGBackfill& m); seastar::future<> handle_backfill(MOSDPGBackfill& m); + seastar::future<> handle_backfill_remove(MOSDPGBackfillRemove& m); + seastar::future<> handle_scan_get_digest( MOSDPGScan& m); seastar::future<> handle_scan_digest( -- 2.39.5