From a674605119cd380ac3cb6a18b76104ee9a916a00 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 22 May 2019 02:57:03 -0700 Subject: [PATCH] osd/PeeringState: make PeeringCtx inherit from BufferedRecoveryMessages This'll be convenient in crimson for compound messages, don't want to share an actual PeeringCtx, but want to combine the messages to send. Using inheritance here simply prevents another round of changing all of the PeeringCtx member users. Signed-off-by: Samuel Just --- src/osd/PeeringState.cc | 10 ++++++++++ src/osd/PeeringState.h | 33 ++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index a707e48426f62..0acaf1f7b7fa3 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -17,6 +17,16 @@ #define dout_context cct #define dout_subsys ceph_subsys_osd +BufferedRecoveryMessages::BufferedRecoveryMessages(PeeringCtx &ctx) + : query_map(std::move(ctx.query_map)), + info_map(std::move(ctx.info_map)), + notify_list(std::move(ctx.notify_list)) +{ + ctx.query_map.clear(); + ctx.info_map.clear(); + ctx.notify_list.clear(); +} + void PGPool::update(CephContext *cct, OSDMapRef map) { const pg_pool_t *pi = map->get_pg_pool(id); diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index d24661876076a..1e20b81d553ae 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -54,25 +54,16 @@ struct PGPool { void update(CephContext *cct, OSDMapRef map); }; +class PeeringCtx; + // [primary only] content recovery state struct BufferedRecoveryMessages { map > query_map; map > > info_map; map > > notify_list; -}; - -struct PeeringCtx { - map > query_map; - map > > info_map; - map > > notify_list; - ObjectStore::Transaction transaction; - HBHandle* handle = nullptr; - - PeeringCtx() = default; - void reset_transaction() { - transaction = ObjectStore::Transaction(); - } + BufferedRecoveryMessages() = default; + BufferedRecoveryMessages(PeeringCtx &); void accept_buffered_messages(BufferedRecoveryMessages &m) { for (auto &[target, qmap] : m.query_map) { @@ -94,6 +85,22 @@ struct PeeringCtx { } }; +struct PeeringCtx : BufferedRecoveryMessages { + ObjectStore::Transaction transaction; + HBHandle* handle = nullptr; + + PeeringCtx() = default; + + PeeringCtx(const PeeringCtx &) = delete; + PeeringCtx &operator=(const PeeringCtx &) = delete; + + PeeringCtx(PeeringCtx &&) = default; + PeeringCtx &operator=(PeeringCtx &&) = default; + + void reset_transaction() { + transaction = ObjectStore::Transaction(); + } +}; /* Encapsulates PG recovery process */ class PeeringState : public MissingLoc::MappingInfo { -- 2.39.5