From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/crimson/osd/pg_recovery.h | 113 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/crimson/osd/pg_recovery.h (limited to 'src/crimson/osd/pg_recovery.h') diff --git a/src/crimson/osd/pg_recovery.h b/src/crimson/osd/pg_recovery.h new file mode 100644 index 000000000..86f259de5 --- /dev/null +++ b/src/crimson/osd/pg_recovery.h @@ -0,0 +1,113 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include + +#include "crimson/osd/backfill_state.h" +#include "crimson/osd/osd_operation.h" +#include "crimson/osd/pg_recovery_listener.h" +#include "crimson/osd/scheduler/scheduler.h" +#include "crimson/osd/shard_services.h" + +#include "osd/object_state.h" + +class MOSDPGBackfillRemove; +class PGBackend; + +class PGRecovery : public crimson::osd::BackfillState::BackfillListener { +public: + PGRecovery(PGRecoveryListener* pg) : pg(pg) {} + virtual ~PGRecovery() {} + void start_pglogbased_recovery(); + + crimson::osd::blocking_future start_recovery_ops(size_t max_to_start); + void on_backfill_reserved(); + void dispatch_backfill_event( + boost::intrusive_ptr evt); + + seastar::future<> stop() { return seastar::now(); } +private: + PGRecoveryListener* pg; + size_t start_primary_recovery_ops( + size_t max_to_start, + std::vector> *out); + size_t start_replica_recovery_ops( + size_t max_to_start, + std::vector> *out); + + std::vector get_replica_recovery_order() const { + return pg->get_replica_recovery_order(); + } + crimson::osd::blocking_future<> recover_missing( + const hobject_t &soid, eversion_t need); + size_t prep_object_replica_deletes( + const hobject_t& soid, + eversion_t need, + std::vector> *in_progress); + size_t prep_object_replica_pushes( + const hobject_t& soid, + eversion_t need, + std::vector> *in_progress); + + void on_local_recover( + const hobject_t& soid, + const ObjectRecoveryInfo& recovery_info, + bool is_delete, + ceph::os::Transaction& t); + void on_global_recover ( + const hobject_t& soid, + const object_stat_sum_t& stat_diff, + bool is_delete); + void on_failed_recover( + const set& from, + const hobject_t& soid, + const eversion_t& v); + void on_peer_recover( + pg_shard_t peer, + const hobject_t &oid, + const ObjectRecoveryInfo &recovery_info); + void _committed_pushed_object(epoch_t epoch, + eversion_t last_complete); + friend class ReplicatedRecoveryBackend; + friend class crimson::osd::UrgentRecovery; + seastar::future<> handle_pull(Ref m); + seastar::future<> handle_push(Ref m); + seastar::future<> handle_push_reply(Ref m); + seastar::future<> handle_recovery_delete(Ref m); + seastar::future<> handle_recovery_delete_reply( + Ref m); + seastar::future<> handle_pull_response(Ref m); + seastar::future<> handle_scan(MOSDPGScan& m); + + // backfill begin + std::unique_ptr backfill_state; + std::map> backfill_drop_requests; + + template + void start_backfill_recovery( + const EventT& evt); + void request_replica_scan( + const pg_shard_t& target, + const hobject_t& begin, + const hobject_t& end) final; + void request_primary_scan( + const hobject_t& begin) final; + void enqueue_push( + const hobject_t& obj, + const eversion_t& v) final; + void enqueue_drop( + const pg_shard_t& target, + const hobject_t& obj, + const eversion_t& v) final; + void maybe_flush() final; + void update_peers_last_backfill( + const hobject_t& new_last_backfill) final; + bool budget_available() const final; + void backfilled() final; + friend crimson::osd::BackfillState::PGFacade; + friend crimson::osd::PG; + // backfill end +}; -- cgit v1.2.3