From: Yuri Weinstein Date: Fri, 19 Oct 2018 20:43:47 +0000 (-0400) Subject: Merge pull request #23952 from ukernel/mimic-mds-export-size X-Git-Tag: v13.2.3~115 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=34602bc56b1d5e038fbba94c20e7529bb55c0bf4;p=ceph.git Merge pull request #23952 from ukernel/mimic-mds-export-size mimic: mds: optimize the way how max export size is enforced Reviewed-by: Patrick Donnelly --- 34602bc56b1d5e038fbba94c20e7529bb55c0bf4 diff --cc src/mds/CDir.cc index 0101e33e039f,49b5cef52dfd..431ff733e440 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@@ -2971,11 -2960,27 +2971,28 @@@ pair CDir::is_freezing_or_fr if (dir->inode->parent) dir = dir->inode->parent->dir; else - return false; // root on replica + break; // root on replica } + return make_pair(freezing, frozen); } + CDir *CDir::get_freezing_tree_root() + { + if (num_freezing_trees == 0) + return nullptr; + CDir *dir = this; + while (true) { + if (dir->is_freezing_tree_root()) + return dir; + if (dir->is_subtree_root()) + return nullptr; + if (dir->inode->parent) + dir = dir->inode->parent->dir; + else + return nullptr; + } + } + CDir *CDir::get_frozen_tree_root() { assert(is_frozen()); diff --cc src/mds/CDir.h index 014209054b4a,42c7c89aa103..e5406fdb4a01 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@@ -739,23 -739,14 +739,24 @@@ public void maybe_finish_freeze(); - bool is_freezing() const override { return is_freezing_tree() || is_freezing_dir(); } - bool is_freezing_tree() const; + pair is_freezing_or_frozen_tree() const; + + bool is_freezing() const override { return is_freezing_dir() || is_freezing_tree(); } + bool is_freezing_tree() const { + if (!num_freezing_trees) + return false; + return is_freezing_or_frozen_tree().first; + } bool is_freezing_tree_root() const { return state & STATE_FREEZINGTREE; } bool is_freezing_dir() const { return state & STATE_FREEZINGDIR; } + CDir *get_freezing_tree_root(); bool is_frozen() const override { return is_frozen_dir() || is_frozen_tree(); } - bool is_frozen_tree() const; + bool is_frozen_tree() const { + if (!num_frozen_trees) + return false; + return is_freezing_or_frozen_tree().second; + } bool is_frozen_tree_root() const { return state & STATE_FROZENTREE; } bool is_frozen_dir() const { return state & STATE_FROZENDIR; }