From 270a12a64e245c72b9557c83222f5df63b7e5222 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 23 Dec 2008 16:36:12 -0800 Subject: [PATCH] mds: only include trace in first reply No need to do it twice. --- src/mds/MDCache.h | 7 ++++--- src/mds/Server.cc | 6 +++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 249d0d41c047..0c5b8aa2e50a 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -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) {} diff --git a/src/mds/Server.cc b/src/mds/Server.cc index ee3491fe1c20..f60b6ec378e9 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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); } -- 2.47.3