From 99c9147452fa8a1b1cd7f1b03a0aa86ec5ad3124 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 30 Nov 2016 22:19:28 +0800 Subject: [PATCH] mds: only send slave rmdir prepare to auth mds of subtree This avoid trigger the assertion of path traverse return value in Server::handle_slave_rmdir_prep. (Other witness mds may release the inode before receiving the slave rmdir prepare) Signed-off-by: Yan, Zheng --- src/mds/Server.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 4f1057bf754..af7c513718a 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -5535,7 +5535,14 @@ void Server::handle_client_unlink(MDRequestRef& mdr) if (in->is_dir() && in->has_subtree_root_dirfrag()) { // subtree root auths need to be witnesses set witnesses; - in->list_replicas(witnesses); + + list dfls; + in->get_subtree_dirfrags(dfls); + for (auto p : dfls) { + if (mds->get_nodeid() != p->get_dir_auth().first) + witnesses.insert(p->get_dir_auth().first); + } + dout(10) << " witnesses " << witnesses << ", have " << mdr->more()->witnessed << dendl; for (set::iterator p = witnesses.begin(); -- 2.47.3