]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: OSDMonitor: implement C_MonOp on op-related callback contexts
authorJoao Eduardo Luis <joao@suse.de>
Wed, 17 Jun 2015 10:00:06 +0000 (11:00 +0100)
committerJoao Eduardo Luis <joao@suse.de>
Thu, 16 Jul 2015 17:06:07 +0000 (18:06 +0100)
These contexts deal with MonOpRequests, and we need to track their life
cycle; use C_MonOp to mark events when the callbacks are woken up for
some reason.

Signed-off-by: Joao Eduardo Luis <joao@suse.de>
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 7d89325fe75eeca1fda1a0d69001b80c0ed9f3b2..3185700d941a628a93b9c6f2a06ad5bfd1e040ff 100644 (file)
@@ -1459,16 +1459,15 @@ bool OSDMonitor::preprocess_failure(MonOpRequestRef op)
   return true;
 }
 
-class C_AckMarkedDown : public Context {
+class C_AckMarkedDown : public C_MonOp {
   OSDMonitor *osdmon;
-  MonOpRequestRef op;
 public:
   C_AckMarkedDown(
     OSDMonitor *osdmon,
     MonOpRequestRef op)
-    : osdmon(osdmon), op(op) {}
+    : C_MonOp(op), osdmon(osdmon) {}
 
-  void finish(int) {
+  void _finish(int) {
     MOSDMarkMeDown *m = static_cast<MOSDMarkMeDown*>(op->get_req());
     osdmon->mon->send_reply(
       m,
index 4be9b06413c966b901fcf6922a640bb4d43fbebb..2907dcbc0ee9938ecf7c77416abcb3bd9490b2f6 100644 (file)
@@ -331,13 +331,12 @@ private:
   void _pool_op_reply(MonOpRequestRef op,
                       int ret, epoch_t epoch, bufferlist *blp=NULL);
 
-  struct C_Booted : public Context {
+  struct C_Booted : public C_MonOp {
     OSDMonitor *cmon;
-    MonOpRequestRef op;
     bool logit;
-    C_Booted(OSDMonitor *cm, MonOpRequestRef op_, bool l=true) : 
-      cmon(cm), op(op_), logit(l) {}
-    void finish(int r) {
+    C_Booted(OSDMonitor *cm, MonOpRequestRef op_, bool l=true) :
+      C_MonOp(op_), cmon(cm), logit(l) {}
+    void _finish(int r) {
       if (r >= 0)
        cmon->_booted(op, logit);
       else if (r == -ECANCELED)
@@ -349,13 +348,12 @@ private:
     }
   };
 
-  struct C_ReplyMap : public Context {
+  struct C_ReplyMap : public C_MonOp {
     OSDMonitor *osdmon;
-    MonOpRequestRef op;
     epoch_t e;
     C_ReplyMap(OSDMonitor *o, MonOpRequestRef op_, epoch_t ee)
-      : osdmon(o), op(op_), e(ee) {}
-    void finish(int r) {
+      : C_MonOp(op_), osdmon(o), e(ee) {}
+    void _finish(int r) {
       if (r >= 0)
        osdmon->_reply_map(op, e);
       else if (r == -ECANCELED)
@@ -366,18 +364,17 @@ private:
        assert(0 == "bad C_ReplyMap return value");
     }    
   };
-  struct C_PoolOp : public Context {
+  struct C_PoolOp : public C_MonOp {
     OSDMonitor *osdmon;
-    MonOpRequestRef op;
     int replyCode;
     int epoch;
     bufferlist reply_data;
     C_PoolOp(OSDMonitor * osd, MonOpRequestRef op_, int rc, int e, bufferlist *rd=NULL) :
-      osdmon(osd), op(op_), replyCode(rc), epoch(e) {
+      C_MonOp(op_), osdmon(osd), replyCode(rc), epoch(e) {
       if (rd)
        reply_data = *rd;
     }
-    void finish(int r) {
+    void _finish(int r) {
       if (r >= 0)
        osdmon->_pool_op_reply(op, replyCode, epoch, &reply_data);
       else if (r == -ECANCELED)