From: Samuel Just Date: Wed, 22 May 2019 09:57:03 +0000 (-0700) Subject: osd/PeeringState: make PeeringCtx inherit from BufferedRecoveryMessages X-Git-Tag: v15.1.0~2378^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a674605119cd380ac3cb6a18b76104ee9a916a00;p=ceph.git 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 --- diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index a707e48426f6..0acaf1f7b7fa 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 d24661876076..1e20b81d553a 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 {