]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: send info of imported caps back to the exporter (rename)
authorYan, Zheng <zheng.z.yan@intel.com>
Tue, 26 Nov 2013 02:31:07 +0000 (10:31 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Mon, 16 Dec 2013 04:15:25 +0000 (12:15 +0800)
use MMDSSlaveRequest::OP_FINISH slave request to send information
of rename imported caps back to the exporter. This is preparation
for including counterpart's information in cap import/export message.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/MDCache.cc
src/mds/Server.cc

index d2942708fdbbc875cab2a8e603369ae6a7366468..21289a1b334621b46f13d5eef7e5b91352f08cb8 100644 (file)
@@ -8738,6 +8738,12 @@ void MDCache::request_drop_foreign_locks(MDRequest *mdr)
        ++p) {
     MMDSSlaveRequest *r = new MMDSSlaveRequest(mdr->reqid, mdr->attempt,
                                               MMDSSlaveRequest::OP_FINISH);
+
+    // information about rename imported caps
+    if (mdr->more()->srcdn_auth_mds == *p &&
+       mdr->more()->inode_import.length() > 0)
+      r->inode_export.claim(mdr->more()->inode_import);
+
     mds->send_message_mds(r, *p);
   }
 
index f746927ce98c8aed1806a0b37435322f64778cb2..1d249403ddb7344739de831ae75feef307759a13 100644 (file)
@@ -1585,6 +1585,9 @@ void Server::dispatch_slave_request(MDRequest *mdr)
     break;
 
   case MMDSSlaveRequest::OP_FINISH:
+    // information about rename imported caps
+    if (mdr->slave_request->inode_export.length() > 0)
+      mdr->more()->inode_import.claim(mdr->slave_request->inode_export);
     // finish off request.
     mdcache->request_finish(mdr);
     break;
@@ -6341,6 +6344,10 @@ void Server::_rename_apply(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDen
                                                         mdr->more()->cap_imports[destdnl->get_inode()],
                                                         imported_caps);
       }
+
+      mdr->more()->inode_import.clear();
+      ::encode(imported_caps, mdr->more()->inode_import);
+
       /* hack: add an auth pin for each xlock we hold. These were
        * remote xlocks previously but now they're local and
        * we're going to try and unpin when we xlock_finish. */
@@ -6722,6 +6729,10 @@ void Server::_commit_slave_rename(MDRequest *mdr, int r,
          mds->locker->xlock_export(lock, mdr);
       }
 
+      map<client_t,Capability::Import> peer_imported;
+      bufferlist::iterator bp = mdr->more()->inode_import.begin();
+      ::decode(peer_imported, bp);
+
       dout(10) << " finishing inode export on " << *destdnl->get_inode() << dendl;
       mdcache->migrator->finish_export_inode(destdnl->get_inode(), mdr->now, finished);
       mds->queue_waiters(finished);   // this includes SINGLEAUTH waiters.