Skip to content

Commit

Permalink
Merge pull request #52844 from lxbsz/wip-62202
Browse files Browse the repository at this point in the history
pacific: mds: skip forwarding request if the session were removed

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
  • Loading branch information
yuriw committed Aug 17, 2023
2 parents cf13d33 + b0126c0 commit f0e567f
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/mds/MDCache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9583,7 +9583,7 @@ void MDCache::request_forward(MDRequestRef& mdr, mds_rank_t who, int port)
if (mdr->is_batch_head()) {
mdr->release_batch_op()->forward(who);
} else {
mds->forward_message_mds(mdr->release_client_request(), who);
mds->forward_message_mds(mdr, who);
}
if (mds->logger) mds->logger->inc(l_mds_forward);
} else if (mdr->internal_op >= 0) {
Expand Down
8 changes: 7 additions & 1 deletion src/mds/MDSRank.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1465,10 +1465,12 @@ void MDSRank::send_message_mds(const ref_t<Message>& m, const entity_addrvec_t &
messenger->send_to_mds(ref_t<Message>(m).detach(), addr);
}

void MDSRank::forward_message_mds(const cref_t<MClientRequest>& m, mds_rank_t mds)
void MDSRank::forward_message_mds(MDRequestRef& mdr, mds_rank_t mds)
{
ceph_assert(mds != whoami);

auto m = mdr->release_client_request();

/*
* don't actually forward if non-idempotent!
* client has to do it. although the MDS will ignore duplicate requests,
Expand All @@ -1480,6 +1482,10 @@ void MDSRank::forward_message_mds(const cref_t<MClientRequest>& m, mds_rank_t md

// tell the client where it should go
auto session = get_session(m);
if (!session) {
dout(1) << "no session found, failed to forward client request " << mdr << dendl;
return;
}
auto f = make_message<MClientRequestForward>(m->get_tid(), mds, m->get_num_fwd()+1, client_must_resend);
send_message_client(f, session);
}
Expand Down
2 changes: 1 addition & 1 deletion src/mds/MDSRank.h
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ class MDSRank {

void send_message_mds(const ref_t<Message>& m, mds_rank_t mds);
void send_message_mds(const ref_t<Message>& m, const entity_addrvec_t &addr);
void forward_message_mds(const cref_t<MClientRequest>& req, mds_rank_t mds);
void forward_message_mds(MDRequestRef& mdr, mds_rank_t mds);
void send_message_client_counted(const ref_t<Message>& m, client_t client);
void send_message_client_counted(const ref_t<Message>& m, Session* session);
void send_message_client_counted(const ref_t<Message>& m, const ConnectionRef& connection);
Expand Down
2 changes: 1 addition & 1 deletion src/mds/Server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class Batch_Getattr_Lookup : public BatchOp {
}
void _forward(mds_rank_t t) override {
MDCache* mdcache = server->mdcache;
mdcache->mds->forward_message_mds(mdr->release_client_request(), t);
mdcache->mds->forward_message_mds(mdr, t);
mdr->set_mds_stamp(ceph_clock_now());
for (auto& m : batch_reqs) {
if (!m->killed)
Expand Down

0 comments on commit f0e567f

Please sign in to comment.