From 61bf8f409a79f10fe0526e554fc7a4cd4d4b7cdc Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 22 Aug 2019 10:13:17 -0500 Subject: [PATCH] osd/PeeringState: give PeeringCtxWrapper a BufferedRecoveryMessages ref The ref can be either a raw BufferedRecoveryMessages (buffering) or a PeeringCtx (child class, no buffering). This avoids the need for a member ref, and also means that we can (later) make methods take the BufferedRecoveryMessages ref as a general interface to consume for both buffered and non-buffered work that is outside of PeeringState. Signed-off-by: Sage Weil --- src/osd/PeeringState.cc | 2 +- src/osd/PeeringState.h | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 1df535093ac4b..74c416f21fed5 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -28,7 +28,7 @@ BufferedRecoveryMessages::BufferedRecoveryMessages(PeeringCtx &ctx) ctx.message_map.clear(); } -void PeeringCtxWrapper::send_notify(int to, const pg_notify_t &n) +void BufferedRecoveryMessages::send_notify(int to, const pg_notify_t &n) { vector notifies; notifies.push_back(n); diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index f60f9d66bf5e8..790b32d35c6fd 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -79,6 +79,11 @@ struct BufferedRecoveryMessages { ovec.swap(ls); } } + + void send_osd_message(int target, Message *m) { + message_map[target].push_back(m); + } + void send_notify(int to, const pg_notify_t &n); }; struct HeartbeatStamps : public RefCountedObject { @@ -197,32 +202,34 @@ struct PeeringCtx : BufferedRecoveryMessages { */ struct PeeringCtxWrapper { utime_t start_time; + BufferedRecoveryMessages &msgs; map > &query_map; map> &info_map; - map> &message_map; ObjectStore::Transaction &transaction; HBHandle * const handle = nullptr; PeeringCtxWrapper(PeeringCtx &wrapped) : + msgs(wrapped), query_map(wrapped.query_map), info_map(wrapped.info_map), - message_map(wrapped.message_map), transaction(wrapped.transaction), handle(wrapped.handle) {} PeeringCtxWrapper(BufferedRecoveryMessages &buf, PeeringCtx &wrapped) - : query_map(buf.query_map), + : msgs(buf), + query_map(buf.query_map), info_map(buf.info_map), - message_map(buf.message_map), transaction(wrapped.transaction), handle(wrapped.handle) {} PeeringCtxWrapper(PeeringCtxWrapper &&ctx) = default; void send_osd_message(int target, Message *m) { - message_map[target].push_back(m); + msgs.send_osd_message(target, m); + } + void send_notify(int to, const pg_notify_t &n) { + msgs.send_notify(to, n); } - void send_notify(int to, const pg_notify_t &n); }; /* Encapsulates PG recovery process */ -- 2.39.5