]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: pass created_ino back to client on replayed requests
authorSage Weil <sage@inktank.com>
Wed, 6 Mar 2013 03:12:21 +0000 (19:12 -0800)
committerSage Weil <sage@inktank.com>
Fri, 8 Mar 2013 01:51:57 +0000 (17:51 -0800)
After an MDS restart, the client will resend uncommitted requests.  Use the
information we now have in the session_info_t to pass the created ino
back via the extra_bl payload in the reply.

Fixes: #4034
Signed-off-by: Sage Weil <sage@inktank.com>
src/mds/Server.cc

index da2c03447f4c0a310b004c5cd8a58781875ccb55..d3acd15a0fd6df52999491507c1fa1d535bbef80 100644 (file)
@@ -1099,7 +1099,13 @@ void Server::handle_client_request(MClientRequest *req)
     inodeno_t created;
     if (session->have_completed_request(req->get_reqid().tid, &created)) {
       dout(5) << "already completed " << req->get_reqid() << dendl;
-      mds->messenger->send_message(new MClientReply(req, 0), req->get_connection());
+      MClientReply *reply = new MClientReply(req, 0);
+      if (created != inodeno_t()) {
+       bufferlist extra;
+       ::encode(created, extra);
+       reply->set_extra_bl(extra);
+      }
+      mds->messenger->send_message(reply, req->get_connection());
 
       if (req->is_replay())
        mds->queue_one_replay();