]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: drop replayed requests when seesion is closed 4173/head
authorYan, Zheng <zyan@redhat.com>
Wed, 25 Mar 2015 02:33:23 +0000 (10:33 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 25 Mar 2015 02:47:22 +0000 (10:47 +0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/Server.cc

index e387e0fd7f92f22d9e2e1679c8e3db0ea77482f0..eabb152228919de1e626f01afc93bfa40788c499 100644 (file)
@@ -118,6 +118,12 @@ void Server::dispatch(Message *m)
     if (m->get_type() == CEPH_MSG_CLIENT_REQUEST &&
        (mds->is_reconnect() || mds->get_want_state() == CEPH_MDS_STATE_RECONNECT)) {
       MClientRequest *req = static_cast<MClientRequest*>(m);
+      Session *session = get_session(req);
+      if (!session || session->is_closed()) {
+       dout(5) << "session is closed, dropping " << req->get_reqid() << dendl;
+       req->put();
+       return;
+      }
       bool queue_replay = false;
       if (req->is_replay()) {
        dout(3) << "queuing replayed op" << dendl;
@@ -126,8 +132,7 @@ void Server::dispatch(Message *m)
        // process completed request in clientreplay stage. The completed request
        // might have created new file/directorie. This guarantees MDS sends a reply
        // to client before other request modifies the new file/directorie.
-       Session *session = get_session(req);
-       if (session && session->have_completed_request(req->get_reqid().tid, NULL)) {
+       if (session->have_completed_request(req->get_reqid().tid, NULL)) {
          dout(3) << "queuing completed op" << dendl;
          queue_replay = true;
        }