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)
// ---------------------------------------------------
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) {}
// include cap info?
include_cap_in_reply(mdr, reply);
+ mdr->did_early_reply = true;
+
messenger->send_message(reply, client_inst);
}
// 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;
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);
}