]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #23952 from ukernel/mimic-mds-export-size
authorYuri Weinstein <yweinste@redhat.com>
Fri, 19 Oct 2018 20:43:47 +0000 (16:43 -0400)
committerGitHub <noreply@github.com>
Fri, 19 Oct 2018 20:43:47 +0000 (16:43 -0400)
mimic: mds: optimize the way how max export size is enforced

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/Migrator.cc
src/mds/Migrator.h
src/mds/Mutation.h
src/mds/Server.cc

Simple merge
diff --cc src/mds/CDir.cc
index 0101e33e039f897fad735c88bf265a88cd68e475,49b5cef52dfdb09303409654dc3190e77645c93c..431ff733e440af88478f1aa76b6ae8461859e1dd
@@@ -2971,11 -2960,27 +2971,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 014209054b4a709af75c7ffc61ff76d1b9968f65,42c7c89aa1031b46b5e337302aaccc2288f5f04f..e5406fdb4a0150bea7c20fbac35b9019d87eb1c4
@@@ -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<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