If it is a _replayed_ request, we should always send a simple ack if it is
completed, because the client doesn't not care about any additional caps.
If it is a _resent_ request, then we want to return useful caps on open or
create requests, even if any modification side-effects have already been
committed. The additional checks for completed already exist in the
create and open handlers.
Signed-off-by: Sage Weil <sage@newdream.net>
// they have a high request rate.
}
- // retry?
- if ((req->get_retry_attempt() || req->is_replay()) &&
- ((req->get_op() != CEPH_MDS_OP_OPEN) &&
- (req->get_op() != CEPH_MDS_OP_CREATE))) {
+ // completed request?
+ if (req->is_replay() ||
+ (req->get_retry_attempt() &&
+ req->get_op() != CEPH_MDS_OP_OPEN &&
+ req->get_op() != CEPH_MDS_OP_CREATE)) {
assert(session);
if (session->have_completed_request(req->get_reqid().tid)) {
dout(5) << "already completed " << req->get_reqid() << dendl;
return;
}
}
+
// trim completed_request list
if (req->get_oldest_client_tid() > 0) {
dout(15) << " oldest_client_tid=" << req->get_oldest_client_tid() << dendl;