]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: OSDMonitor fills in MPoolOpReply's bufferlist on unmanaged snap creation
authorGreg Farnum <gregf@hq.newdream.net>
Fri, 9 Apr 2010 23:53:13 +0000 (16:53 -0700)
committerSage Weil <sage@newdream.net>
Fri, 23 Apr 2010 21:42:48 +0000 (14:42 -0700)
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index ee4dbc8276a159576b637a403b0649c72a620a82..41b8b6bd0a68d85826601bd2b0088b12213017f1 100644 (file)
@@ -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;
 }
index 246822508f9721ae49f6d7408e62abfd0ad263eb..0d2706669e41ee3c3175ecefdd2071acd86e0d9d 100644 (file)
@@ -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);
     }
   };