]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PeeringState: give PeeringCtxWrapper a BufferedRecoveryMessages ref
authorSage Weil <sage@redhat.com>
Thu, 22 Aug 2019 15:13:17 +0000 (10:13 -0500)
committerSage Weil <sage@redhat.com>
Mon, 9 Sep 2019 16:22:11 +0000 (11:22 -0500)
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 <sage@redhat.com>
src/osd/PeeringState.cc
src/osd/PeeringState.h

index 1df535093ac4b5410a67b9eceb66dbcfafd9a69d..74c416f21fed5638007e5256347f728d123d577e 100644 (file)
@@ -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<pg_notify_t> notifies;
   notifies.push_back(n);
index f60f9d66bf5e854dc7b05b0b736a82d624daae3b..790b32d35c6fd52d78b2ed1e85d0e073bfec3e7b 100644 (file)
@@ -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<int, map<spg_t, pg_query_t> > &query_map;
   map<int, vector<pg_notify_t>> &info_map;
-  map<int, vector<MessageRef>> &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 */