From f612ab86b1fa243e58e787c93a2ea2581812a78c Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Fri, 9 Apr 2010 16:53:13 -0700 Subject: [PATCH] mon: OSDMonitor fills in MPoolOpReply's bufferlist on unmanaged snap creation --- src/mon/OSDMonitor.cc | 11 +++++++---- src/mon/OSDMonitor.h | 9 +++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ee4dbc8276a15..41b8b6bd0a68d 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1422,6 +1422,8 @@ bool OSDMonitor::prepare_pool_op (MPoolOp *m) const pg_pool_t *p = osdmap.get_pg_pool(m->pool); pg_pool_t* pp = 0; int rc = 0; + bufferlist *blp = NULL; + __u64 snapid(0); //if the pool isn't already in the update, add it if (!pending_inc.new_pools.count(m->pool)) pending_inc.new_pools[m->pool] = *p; @@ -1433,8 +1435,9 @@ bool OSDMonitor::prepare_pool_op (MPoolOp *m) dout(10) << "create snap in pool " << m->pool << " " << m->name << " seq " << pp->get_snap_epoch() << dendl; break; case POOL_OP_CREATE_UNMANAGED_SNAP: - __u64 snapid(0); + blp = new bufferlist(); rc = pp->add_unmanaged_snap(snapid); + ::encode(snapid, *blp); break; case POOL_OP_DELETE_SNAP: pp->remove_snap(pp->snap_exists(m->name.c_str())); @@ -1447,7 +1450,7 @@ bool OSDMonitor::prepare_pool_op (MPoolOp *m) } pp->set_snap_epoch(pending_inc.epoch); - paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, rc, pending_inc.epoch)); + paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, rc, pending_inc.epoch, blp)); return true; } @@ -1491,11 +1494,11 @@ bool OSDMonitor::prepare_pool_op_auid (MPoolOp *m) return true; } -void OSDMonitor::_pool_op(MPoolOp *m, int replyCode, epoch_t epoch) +void OSDMonitor::_pool_op(MPoolOp *m, int replyCode, epoch_t epoch, bufferlist *blp) { dout(20) << "_pool_op returning with replyCode " << replyCode << dendl; MPoolOpReply *reply = new MPoolOpReply(m->fsid, m->get_tid(), - replyCode, epoch, mon->get_epoch()); + replyCode, epoch, mon->get_epoch(), blp); mon->send_reply(m, reply); delete m; } diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 246822508f972..0d2706669e41e 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -93,7 +93,7 @@ private: int prepare_new_pool(string& name, __u64 auid = CEPH_AUTH_UID_DEFAULT); int prepare_new_pool(MPoolOp *m); - void _pool_op(MPoolOp *m, int replyCode, epoch_t epoch); + void _pool_op(MPoolOp *m, int replyCode, epoch_t epoch, bufferlist *blp=NULL); struct C_Booted : public Context { OSDMonitor *cmon; @@ -135,10 +135,11 @@ private: MPoolOp *m; int replyCode; int epoch; - C_PoolOp(OSDMonitor * osd, MPoolOp *m_, int rc, int e) : - osdmon(osd), m(m_), replyCode(rc), epoch(e) {} + bufferlist *reply_data; + C_PoolOp(OSDMonitor * osd, MPoolOp *m_, int rc, int e, bufferlist *rd=NULL) : + osdmon(osd), m(m_), replyCode(rc), epoch(e), reply_data(rd) {} void finish(int r) { - osdmon->_pool_op(m, replyCode, epoch); + osdmon->_pool_op(m, replyCode, epoch, reply_data); } }; -- 2.39.5