From aea1082ec4388c8ce3f5418bef57f4f23d771d59 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Fri, 12 Feb 2010 14:25:57 -0800 Subject: [PATCH] mon/msg: MPoolOp can carry POOL_OP_DELETE; OSDMon puts pool in incre old_pools --- src/messages/MPoolOp.h | 3 +++ src/mon/OSDMonitor.cc | 12 +++++++++++- src/mon/OSDMonitor.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/messages/MPoolOp.h b/src/messages/MPoolOp.h index bd5f8e2adda54..26bb74825b893 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 424cb6092749f..49af33a42d287 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 1c5f50414f17b..adad0bbe7b617 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 { -- 2.39.5