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 a707e48426f..0acaf1f7b7f 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 d2466187607..1e20b81d553 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 {