]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: only include trace in first reply
authorSage Weil <sage@newdream.net>
Wed, 24 Dec 2008 00:36:12 +0000 (16:36 -0800)
committerSage Weil <sage@newdream.net>
Wed, 24 Dec 2008 00:36:12 +0000 (16:36 -0800)
No need to do it twice.

src/mds/MDCache.h
src/mds/Server.cc

index 249d0d41c047c1379f8d886463a92931501ff80e..0c5b8aa2e50ac104a410e2f3a2d6ab0244d9e5e6 100644 (file)
@@ -261,6 +261,7 @@ struct MDRequest : public Mutation {
   Capability *cap;
   int snap_caps;
   bufferlist snapbl;
+  bool did_early_reply;
 
   // -- i am a slave request
   MMDSSlaveRequest *slave_request; // slave request (if one is pending; implies slave == true)
@@ -317,21 +318,21 @@ struct MDRequest : public Mutation {
   // ---------------------------------------------------
   MDRequest() : 
     session(0), client_request(0), ref(0), ref_snapdiri(0), ref_snapid(CEPH_NOSNAP),
-    alloc_ino(0), used_prealloc_ino(0), cap(NULL), snap_caps(0),
+    alloc_ino(0), used_prealloc_ino(0), cap(NULL), snap_caps(0), did_early_reply(false),
     slave_request(0),
     internal_op(-1),
     _more(0) {}
   MDRequest(metareqid_t ri, MClientRequest *req) : 
     Mutation(ri),
     session(0), client_request(req), ref(0), ref_snapdiri(0),
-    alloc_ino(0), used_prealloc_ino(0), cap(NULL), snap_caps(0),
+    alloc_ino(0), used_prealloc_ino(0), cap(NULL), snap_caps(0), did_early_reply(false),
     slave_request(0),
     internal_op(-1),
     _more(0) {}
   MDRequest(metareqid_t ri, int by) : 
     Mutation(ri, by),
     session(0), client_request(0), ref(0), ref_snapdiri(0),
-    alloc_ino(0), used_prealloc_ino(0), cap(NULL), snap_caps(0),
+    alloc_ino(0), used_prealloc_ino(0), cap(NULL), snap_caps(0), did_early_reply(false),
     slave_request(0),
     internal_op(-1),
     _more(0) {}
index ee3491fe1c20929b915857d4b3d50df115b72634..f60b6ec378e9d00314c5006eef0a0d73bd0fe1fd 100644 (file)
@@ -560,6 +560,8 @@ void Server::early_reply(MDRequest *mdr, CInode *tracei, CDentry *tracedn)
   // include cap info?
   include_cap_in_reply(mdr, reply);
 
+  mdr->did_early_reply = true;
+
   messenger->send_message(reply, client_inst);
 }
 
@@ -625,6 +627,7 @@ void Server::reply_request(MDRequest *mdr, MClientReply *reply, CInode *tracei,
   // clean up request, drop locks, etc.
   // do this before replying, so that we can issue leases
   Session *session = mdr->session;
+  bool did_early_reply = mdr->did_early_reply;
   entity_inst_t client_inst = req->get_orig_source_inst();
   mdcache->request_finish(mdr);
   mdr = 0;
@@ -635,7 +638,8 @@ void Server::reply_request(MDRequest *mdr, MClientReply *reply, CInode *tracei,
     reply = 0;
   } else {
     // send reply, with trace, and possible leases
-    if (tracei || tracedn)
+    if (!did_early_reply &&   // don't issue leases if we sent an earlier reply already
+       (tracei || tracedn)) 
       set_trace_dist(session, reply, tracei, tracedn, snapid, snapdiri);
     messenger->send_message(reply, client_inst);
   }