diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 2b6c7af13ea..81167e363b9 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -9485,6 +9485,19 @@ void MDCache::handle_find_ino(const cref_t &m) if (in) { in->make_path(r->path); dout(10) << " have " << r->path << " " << *in << dendl; + + /* + * If the the CInode was just created by using openc in current + * auth MDS, but the client just sends a getattr request to another + * replica MDS. Then here it will make a path of '#INODE-NUMBER' + * only because the CInode hasn't been linked yet, and the replica + * MDS will keep retrying until the auth MDS flushes the mdlog and + * the C_MDS_openc_finish and link_primary_inode are called at most + * 5 seconds later. + */ + if (!in->get_parent_dn() && in->is_auth()) { + mds->mdlog->flush(); + } } mds->send_message_mds(r, mds_rank_t(m->get_source().num())); }