Skip to content

Commit

Permalink
Server: remove tracei and tracedn parameters from reply_request
Browse files Browse the repository at this point in the history
We have members for these two parameters in the MDRequestImpl already, so
make use of them. This helps us move towards dropping the expectation of an
MClientRequest from functions like rdlock_path_pin_ref().

Signed-off-by: Greg Farnum <[email protected]>
  • Loading branch information
gregsfortytwo committed Nov 7, 2014
1 parent 515ab2d commit a65d986
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 19 deletions.
47 changes: 30 additions & 17 deletions src/mds/Server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -901,9 +901,9 @@ void Server::submit_mdlog_entry(LogEvent *le, MDSInternalContextBase *fin, MDReq
/*
* send generic response (just an error code), clean up mdr
*/
void Server::reply_request(MDRequestRef& mdr, int r, CInode *tracei, CDentry *tracedn)
void Server::reply_request(MDRequestRef& mdr, int r)
{
reply_request(mdr, new MClientReply(mdr->client_request, r), tracei, tracedn);
reply_request(mdr, new MClientReply(mdr->client_request, r));
}

void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
Expand Down Expand Up @@ -977,7 +977,7 @@ void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
* include a trace to tracei
* Clean up mdr
*/
void Server::reply_request(MDRequestRef& mdr, MClientReply *reply, CInode *tracei, CDentry *tracedn)
void Server::reply_request(MDRequestRef& mdr, MClientReply *reply)
{
assert(mdr.get());
MClientRequest *req = mdr->client_request;
Expand All @@ -997,10 +997,8 @@ void Server::reply_request(MDRequestRef& mdr, MClientReply *reply, CInode *trace

// get tracei/tracedn from mdr?
snapid_t snapid = mdr->snapid;
if (!tracei)
tracei = mdr->tracei;
if (!tracedn)
tracedn = mdr->tracedn;
CInode *tracei = mdr->tracei;
CDentry *tracedn = mdr->tracedn;

bool is_replay = mdr->client_request->is_replay();
bool did_early_reply = mdr->did_early_reply;
Expand Down Expand Up @@ -2181,7 +2179,9 @@ CInode* Server::rdlock_path_pin_ref(MDRequestRef& mdr, int n,
return NULL; // delayed
if (r < 0) { // error
if (r == -ENOENT && n == 0 && mdr->dn[n].size()) {
reply_request(mdr, r, NULL, no_lookup ? NULL : mdr->dn[n][mdr->dn[n].size()-1]);
if (!no_lookup)
mdr->tracedn = mdr->dn[n][mdr->dn[n].size()-1];
reply_request(mdr, r);
} else if (r == -ESTALE) {
dout(10) << "FAIL on ESTALE but attempting recovery" << dendl;
MDSInternalContextBase *c = new C_MDS_TryFindInode(this, mdr);
Expand Down Expand Up @@ -2447,8 +2447,10 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup)

// reply
dout(10) << "reply to stat on " << *req << dendl;
reply_request(mdr, 0, ref,
is_lookup ? mdr->dn[0].back() : 0);
mdr->tracei = ref;
if (is_lookup)
mdr->tracedn = mdr->dn[0].back();
reply_request(mdr, 0);
}

struct C_MDS_LookupIno2 : public ServerContext {
Expand Down Expand Up @@ -2499,7 +2501,8 @@ void Server::handle_client_lookup_ino(MDRequestRef& mdr,
return;
}
dout(10) << "reply to lookup_parent " << *in << dendl;
reply_request(mdr, 0, diri);
mdr->tracei = diri;
reply_request(mdr, 0);
} else {
if (want_dentry) {
inodeno_t dirino = req->get_filepath2().get_ino();
Expand All @@ -2511,7 +2514,10 @@ void Server::handle_client_lookup_ino(MDRequestRef& mdr,
} else
dout(10) << "reply to lookup_ino " << *in << dendl;

reply_request(mdr, 0, in, want_dentry ? dn : NULL);
mdr->tracei = in;
if (want_dentry)
mdr->tracedn = dn;
reply_request(mdr, 0);
}
}

Expand Down Expand Up @@ -2687,7 +2693,9 @@ void Server::handle_client_open(MDRequestRef& mdr)
dn = mdr->dn[0].back();
}

reply_request(mdr, 0, cur, dn);
mdr->tracei = cur;
mdr->tracedn = dn;
reply_request(mdr, 0);
}

class C_MDS_openc_finish : public MDSInternalContext {
Expand Down Expand Up @@ -2819,7 +2827,9 @@ void Server::handle_client_openc(MDRequestRef& mdr)
// it existed.
assert(req->head.args.open.flags & O_EXCL);
dout(10) << "O_EXCL, target exists, failing with -EEXIST" << dendl;
reply_request(mdr, -EEXIST, dnl->get_inode(), dn);
mdr->tracei = dnl->get_inode();
mdr->tracedn = dn;
reply_request(mdr, -EEXIST);
return;
}

Expand Down Expand Up @@ -3098,7 +3108,8 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
mds->balancer->hit_dir(ceph_clock_now(g_ceph_context), dir, META_POP_IRD, -1, numfiles);

// reply
reply_request(mdr, reply, diri);
mdr->tracei = diri;
reply_request(mdr, reply);
}


Expand Down Expand Up @@ -7353,7 +7364,8 @@ void Server::handle_client_lssnap(MDRequestRef& mdr)

MClientReply *reply = new MClientReply(req);
reply->set_extra_bl(dirbl);
reply_request(mdr, reply, diri);
mdr->tracei = diri;
reply_request(mdr, reply);
}


Expand Down Expand Up @@ -7504,7 +7516,8 @@ void Server::_mksnap_finish(MDRequestRef& mdr, CInode *diri, SnapInfo &info)
mdr->snapid = info.snapid;
MClientReply *reply = new MClientReply(mdr->client_request, 0);
reply->snapbl = diri->snaprealm->get_snap_trace();
reply_request(mdr, reply, diri);
mdr->tracei = diri;
reply_request(mdr, reply);
}


Expand Down
4 changes: 2 additions & 2 deletions src/mds/Server.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ class Server {
MDRequestRef& mdr, const char *evt);
void dispatch_client_request(MDRequestRef& mdr);
void early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn);
void reply_request(MDRequestRef& mdr, int r = 0, CInode *tracei = 0, CDentry *tracedn = 0);
void reply_request(MDRequestRef& mdr, MClientReply *reply, CInode *tracei = 0, CDentry *tracedn = 0);
void reply_request(MDRequestRef& mdr, int r = 0);
void reply_request(MDRequestRef& mdr, MClientReply *reply);
void set_trace_dist(Session *session, MClientReply *reply, CInode *in, CDentry *dn,
snapid_t snapid,
int num_dentries_wanted,
Expand Down

0 comments on commit a65d986

Please sign in to comment.