}
}
-void Client::send_request(MetaRequest *request, MetaSession *session)
+void Client::send_request(MetaRequest *request, MetaSession *session,
+ bool drop_cap_releases)
{
// make the request
mds_rank_t mds = session->mds_num;
r->set_replayed_op();
} else {
encode_cap_releases(request, mds);
- r->releases.swap(request->cap_releases);
+ if (drop_cap_releases) // we haven't send cap reconnect yet, drop cap releases
+ request->cap_releases.clear();
+ else
+ r->releases.swap(request->cap_releases);
}
r->set_mdsmap_epoch(mdsmap->get_epoch());
session->release = NULL;
}
+ // reset my cap seq number
+ session->seq = 0;
+ //connect to the mds' offload targets
+ connect_mds_targets(mds);
+ //make sure unsafe requests get saved
+ resend_unsafe_requests(session);
+
MClientReconnect *m = new MClientReconnect;
// i have an open session.
}
}
}
-
- // reset my cap seq number
- session->seq = 0;
-
- //connect to the mds' offload targets
- connect_mds_targets(mds);
- //make sure unsafe requests get saved
- resend_unsafe_requests(session);
-
session->con->send_message(m);
mount_cond.Signal();
if (req->retry_attempt == 0)
continue; // old requests only
if (req->mds == session->mds_num)
- send_request(req, session);
+ send_request(req, session, true);
}
}
mds_rank_t mds, int drop, int unless);
mds_rank_t choose_target_mds(MetaRequest *req);
void connect_mds_targets(mds_rank_t mds);
- void send_request(MetaRequest *request, MetaSession *session);
+ void send_request(MetaRequest *request, MetaSession *session,
+ bool drop_cap_releases=false);
MClientRequest *build_client_request(MetaRequest *request);
void kick_requests(MetaSession *session);
void kick_requests_closed(MetaSession *session);