]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
objecter: Implement bufferlist-based return code for pool ops
authorGreg Farnum <gregf@hq.newdream.net>
Tue, 13 Apr 2010 17:34:25 +0000 (10:34 -0700)
committerSage Weil <sage@newdream.net>
Fri, 23 Apr 2010 21:42:48 +0000 (14:42 -0700)
src/osdc/Objecter.cc
src/osdc/Objecter.h

index 673fe85550c067c9b7b919fafd207bd82341aa01..54b9b764a95cbe8e1dba26b547db1781e9f3df9f 100644 (file)
@@ -668,7 +668,8 @@ int Objecter::create_pool_snap(int pool, string& snapName, Context *onfinish) {
   return 0;
 }
 
-int Objecter::allocate_selfmanaged_snap(int pool, Context *onfinish)
+int Objecter::allocate_selfmanaged_snap(int pool, bufferlist **blp,
+                                       Context *onfinish)
 {
   dout(10) << "allocate_selfmanaged_snap; pool: " << pool << dendl;
   PoolOp *op = new PoolOp;
@@ -677,6 +678,7 @@ int Objecter::allocate_selfmanaged_snap(int pool, Context *onfinish)
   op->pool = pool;
   op->onfinish = onfinish;
   op->pool_op = POOL_OP_CREATE_UNMANAGED_SNAP;
+  op->blp = blp;
   op_pool[op->tid] = op;
 
   pool_op_submit(op);
@@ -791,12 +793,23 @@ void Objecter::pool_op_submit(PoolOp *op) {
   op->last_submit = g_clock.now();
 }
 
+/**
+ * Handle a reply to a PoolOp message. Check that we sent the message
+ * and give the caller responsibility for the returned bufferlist.
+ * Then either call the finisher or stash the PoolOp, depending on if we
+ * have a new enough map.
+ * Lastly, clean up the message and PoolOp.
+ */
 void Objecter::handle_pool_op_reply(MPoolOpReply *m) {
   dout(10) << "handle_pool_op_reply " << *m << dendl;
   tid_t tid = m->get_tid();
   if (op_pool.count(tid)) {
     PoolOp *op = op_pool[tid];
     dout(10) << "have request " << tid << " at " << op << " Op: " << get_pool_op_name(op->pool_op) << dendl;
+    if (op->blp) {
+      *(op->blp) = m->response_data;
+      m->response_data = NULL;
+    }
     if (m->version > last_seen_version)
       last_seen_version = m->version;
     if (osdmap->get_epoch() < m->epoch) {
index 60401f6bab2183dae94c3e31916e69c6fff1b31e..967af9d3ec7bb535a2f5839d1871b19d1487bfc2 100644 (file)
@@ -340,10 +340,11 @@ public:
     int* replyCode;
     __u64 auid;
     snapid_t snapid;
+    bufferlist **blp;
 
     utime_t last_submit;
     PoolOp() : tid(0), pool(0), onfinish(0), pool_op(0),
-              replyCode(0), auid(0), snapid(0) {}
+              replyCode(0), auid(0), snapid(0), blp(NULL) {}
   };
 
 
@@ -668,7 +669,7 @@ private:
   void pool_op_submit(PoolOp *op);
 public:
   int create_pool_snap(int pool, string& snapName, Context *onfinish);
-  int allocate_selfmanaged_snap(int pool, Context *onfinish);
+  int allocate_selfmanaged_snap(int pool, bufferlist **blp, Context *onfinish);
   int delete_pool_snap(int pool, string& snapName, Context *onfinish);
   int delete_selfmanaged_snap(int pool, snapid_t snap, Context *onfinish);