]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge PR #23088 into master
authorPatrick Donnelly <pdonnell@redhat.com>
Sat, 25 Aug 2018 20:14:09 +0000 (13:14 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Sat, 25 Aug 2018 20:14:09 +0000 (13:14 -0700)
* refs/pull/23088/head:
mds: adjust export size after renaming directory into freezing subtree
mds: clear scatterlock's flushed when removing dirty
mds: export subtree part by part
mds: change default mds_max_export_size to 20M
mds: limit total size of exporting subtrees
mds: optimize the way how max export size is enforced
mds: make CInode::get_dirfrags container agnostic
mds: cleanup MutationImpl::More initialization

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
1  2 
src/common/options.cc
src/mds/CDir.cc
src/mds/CDir.h
src/mds/CInode.cc
src/mds/CInode.h
src/mds/MDSDaemon.cc
src/mds/MDSRank.h
src/mds/Mutation.h
src/mds/Server.cc

Simple merge
diff --cc src/mds/CDir.cc
index b76fcf5f30186a91671eb3c931027f9f82b15a28,978f620e4c4e4c4dcdbb98363c33e76c1bbd118f..8947a49932ef8a3b4e63cfff83a2fb13fe08bbdb
@@@ -2985,11 -2974,27 +2985,28 @@@ pair<bool,bool> 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 4ae1e677a4ddf502bdf9294b619c6cedccb8086c,6a6b416bee12061932a4cea8bf8075d079b0426c..423b7f77f500a3899ad6de34eb21ca6b62ab9812
@@@ -731,23 -731,14 +731,24 @@@ public
  
    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; }
    
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge