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());
void maybe_finish_freeze();
- bool is_freezing() const override { return is_freezing_tree() || is_freezing_dir(); }
- bool is_freezing_tree() const;
+ pair<bool,bool> 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; }
+ CDir *get_frozen_tree_root();
bool is_freezeable(bool freezing=false) const {
// no nested auth pins.
"mds_max_purge_ops_per_pg",
"mds_max_purge_files",
// Migrator
+ "mds_max_export_size",
"mds_inject_migrator_session_race",
"mds_inject_migrator_message_loss",
- "clog_to_graylog",
- "clog_to_graylog_host",
- "clog_to_graylog_port",
"host",
"fsid",
NULL