]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/msg: MPoolOp can carry POOL_OP_DELETE; OSDMon puts pool in incre old_pools
authorGreg Farnum <gregf@hq.newdream.net>
Fri, 12 Feb 2010 22:25:57 +0000 (14:25 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Tue, 16 Feb 2010 22:34:44 +0000 (14:34 -0800)
src/messages/MPoolOp.h
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index bd5f8e2adda54a560c83283bf4d414ec5db65a8e..26bb74825b893aabf1e0903f39012d51bbac57fe 100644 (file)
@@ -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:
index 424cb6092749fb5b6105115438cc2c2fc30b87f6..49af33a42d2873ab182d66a50bbcdbc65459e36f 100644 (file)
@@ -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(),
index 1c5f50414f17bd424859fce99104c6148befcf82..adad0bbe7b617374f77b5eece461b1c0b899acd9 100644 (file)
@@ -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 {