From: Joao Eduardo Luis Date: Wed, 17 Jun 2015 10:00:06 +0000 (+0100) Subject: mon: OSDMonitor: implement C_MonOp on op-related callback contexts X-Git-Tag: v9.1.0~535^2~28 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=903e219ece9cc0a754cfbcd4cf172b35cf012a18;p=ceph.git mon: OSDMonitor: implement C_MonOp on op-related callback contexts 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 --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 7d89325fe75e..3185700d941a 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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(op->get_req()); osdmon->mon->send_reply( m, diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 4be9b06413c9..2907dcbc0ee9 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -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)