From: Greg Farnum Date: Fri, 12 Feb 2010 22:25:57 +0000 (-0800) Subject: mon/msg: MPoolOp can carry POOL_OP_DELETE; OSDMon puts pool in incre old_pools X-Git-Tag: v0.19~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=aea1082ec4388c8ce3f5418bef57f4f23d771d59;p=ceph.git mon/msg: MPoolOp can carry POOL_OP_DELETE; OSDMon puts pool in incre old_pools --- diff --git a/src/messages/MPoolOp.h b/src/messages/MPoolOp.h index bd5f8e2adda5..26bb74825b89 100644 --- a/src/messages/MPoolOp.h +++ b/src/messages/MPoolOp.h @@ -20,6 +20,7 @@ enum { POOL_OP_CREATE, + POOL_OP_DELETE, POOL_OP_CREATE_SNAP, POOL_OP_DELETE_SNAP, }; @@ -28,6 +29,8 @@ static const char *get_pool_op_name(int op) { switch (op) { case POOL_OP_CREATE: return "create pool"; + case POOL_OP_DELETE: + return "delete pool"; case POOL_OP_CREATE_SNAP: return "create snap"; case POOL_OP_DELETE_SNAP: diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 424cb6092749..49af33a42d28 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1295,12 +1295,13 @@ bool OSDMonitor::preprocess_pool_op ( MPoolOp *m) { } return false; //this message needs to go through preparation case POOL_OP_DELETE_SNAP: - //it's a snap deletion request if we make it here if (!snap_exists) { _pool_op(m, -ENOENT, pending_inc.epoch); return true; //done with this message } return false; + case POOL_OP_DELETE: //can't delete except on master + return false; default: assert(0); break; @@ -1323,6 +1324,8 @@ bool OSDMonitor::prepare_pool_op (MPoolOp *m) { if (m->op == POOL_OP_CREATE) { return prepare_pool_op_create(m); + } else if (m->op == POOL_OP_DELETE) { + return prepare_pool_op_delete(m); } const pg_pool_t *p = osdmap.get_pg_pool(m->pool); pg_pool_t* pp = 0; @@ -1356,6 +1359,13 @@ bool OSDMonitor::prepare_pool_op_create (MPoolOp *m) return true; } +bool OSDMonitor::prepare_pool_op_delete (MPoolOp *m) +{ + pending_inc.old_pools.insert(m->pool); + paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, 0, pending_inc.epoch)); + return true; +} + void OSDMonitor::_pool_op(MPoolOp *m, int replyCode, epoch_t epoch) { MPoolOpReply *reply = new MPoolOpReply(m->fsid, m->get_tid(), diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 1c5f50414f17..adad0bbe7b61 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -88,6 +88,7 @@ private: bool preprocess_pool_op_create ( class MPoolOp *m); bool prepare_pool_op (MPoolOp *m); bool prepare_pool_op_create (MPoolOp *m); + bool prepare_pool_op_delete(MPoolOp *m); void _pool_op(MPoolOp *m, int replyCode, epoch_t epoch); struct C_Booted : public Context {