From 3393d55cc1fe8f2d798e398fea1357a1d97f3422 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 15 Sep 2009 13:08:25 -0700 Subject: [PATCH] uclient: Move the MetaRequest to MClientRequest into its own code, and cut out the payload encode/decode since MClientRequests are now made from MetaRequests. Oh, and there are no issues with rebuilding messages -- false alarm! --- src/client/Client.cc | 27 +++++++++++++-------------- src/client/Client.h | 9 ++++----- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 6f7e20e426a14..70f302b0ed728 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -790,16 +790,8 @@ int Client::make_request(MetaRequest *request, request->set_oldest_client_tid(tid); // this one is the oldest. // -- make request -- - MClientRequest *req = new MClientRequest(request->get_op()); - memcpy(&req->head, &request->head, sizeof(ceph_mds_request_head)); - req->set_filepath(request->get_filepath()); - req->set_filepath2(request->get_filepath2()); - req->set_data(request->data); - - // encode payload now, in case we have to resend(in case of mds failure) + MClientRequest *req = make_request_from_Meta(request); request->request = req; - req->encode_payload(); - request->request_payload = req->get_payload(); // hack target mds? if (use_mds >= 0) @@ -906,6 +898,17 @@ int Client::make_request(MetaRequest *request, return r; } +inline MClientRequest* Client::make_request_from_Meta(MetaRequest *request) +{ + MClientRequest *req = new MClientRequest(request->get_op()); + memcpy(&req->head, &request->head, sizeof(ceph_mds_request_head)); + req->set_filepath(request->get_filepath()); + req->set_filepath2(request->get_filepath2()); + req->set_data(request->data); + req->set_retry_attempt(request->retry_attempt); + return req; +} + /* //call me from something that has client_lock held, I think void encode_cap_release(MetaRequest *req, int remove_cap, @@ -979,14 +982,10 @@ void Client::send_request(MetaRequest *request, int mds) // make a new one dout(10) << "send_request rebuilding request " << request->get_tid() << " for mds" << mds << dendl; - r = new MClientRequest; - r->copy_payload(request->request_payload); - r->decode_payload(); - r->set_retry_attempt(request->retry_attempt); + r = make_request_from_Meta(request); r->set_dentry_wanted(); if (request->got_unsafe) r->set_replayed_op(); - r->clear_payload(); // reencode with changes } else request->retry_attempt++; diff --git a/src/client/Client.h b/src/client/Client.h index 75ecc4c4c0f4f..38677434690f4 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -93,9 +93,7 @@ struct InodeCap; struct Inode; struct MetaRequest { - tid_t tid; MClientRequest *request; // the actual request to send out - bufferlist request_payload; // in case i have to retry //used in constructing MClientRequests ceph_mds_request_head head; filepath path, path2; @@ -121,10 +119,11 @@ struct MetaRequest { Cond *caller_cond; // who to take up Cond *dispatch_cond; // who to kick back + Inode *source; Inode *target; MetaRequest(MClientRequest *req, tid_t t) : - tid(t), request(req), + request(req), resend_mds(-1), num_fwd(0), retry_attempt(0), ref(1), reply(0), kick(false), got_safe(false), got_unsafe(false), unsafe_item(this), @@ -134,7 +133,7 @@ struct MetaRequest { } MetaRequest(int op) : - tid(-1), request(NULL), + request(NULL), resend_mds(-1), num_fwd(0), retry_attempt(0), ref(1), reply(0), kick(false), got_safe(false), got_unsafe(false), unsafe_item(this), @@ -1152,7 +1151,7 @@ private: int _fsync(Fh *fh, bool syncdataonly); int _sync_fs(); - + MClientRequest* make_request_from_Meta(MetaRequest * request); public: int mount(); -- 2.39.5