diff options
author | Xiubo Li <xiubli@localhost.localdomain> | 2024-04-17 09:24:10 +0200 |
---|---|---|
committer | Xiubo Li <xiubli@redhat.com> | 2024-04-18 16:29:24 +0200 |
commit | 793ea12a2c7b03140331d40f028677f63cfc9de6 (patch) | |
tree | 64ce4aadbb2b93011130f6a0f35d091332904f12 /src/mds/Server.cc | |
parent | Merge pull request #56962 from cbodley/wip-doc-rgw-reshard-config (diff) | |
download | ceph-793ea12a2c7b03140331d40f028677f63cfc9de6.tar.xz ceph-793ea12a2c7b03140331d40f028677f63cfc9de6.zip |
mds: find a new head for the batch ops when the head is dead
If the batch head request is already dead and then we need to choose
a new batch head anyways and release the reference for the current
batch head request. Else it will be reported as slow request.
Fixes: https://tracker.ceph.com/issues/65536
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Diffstat (limited to 'src/mds/Server.cc')
-rw-r--r-- | src/mds/Server.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 0bb30664ac5..14faeb3ecc9 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2647,9 +2647,14 @@ void Server::dispatch_client_request(const MDRequestRef& mdr) auto it = mdr->batch_op_map->find(mask); auto new_batch_head = it->second->find_new_head(); if (!new_batch_head) { - mdr->batch_op_map->erase(it); - return; + mdr->batch_op_map->erase(it); + dout(10) << __func__ << ": mask '" << mask + << "' batch head is killed and there is no follower" << dendl; + return; } + dout(10) << __func__ << ": mask '" << mask + << "' batch head is killed and queue a new one " + << *new_batch_head << dendl; mds->finisher->queue(new C_MDS_RetryRequest(mdcache, new_batch_head)); return; } else { |