From c49312659a7cadc419c2967286b2de5f2fbb1dbb Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 15 Nov 2010 13:24:24 -0800 Subject: [PATCH] mds: make dirfrag thrashing join and split Signed-off-by: Sage Weil --- src/mds/MDBalancer.cc | 5 +++++ src/mds/MDBalancer.h | 1 + src/mds/MDS.cc | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mds/MDBalancer.cc b/src/mds/MDBalancer.cc index da08bf1949ebf..9a932101f9260 100644 --- a/src/mds/MDBalancer.cc +++ b/src/mds/MDBalancer.cc @@ -314,6 +314,11 @@ void MDBalancer::queue_split(CDir *dir) split_queue.insert(dir->dirfrag()); } +void MDBalancer::queue_merge(CDir *dir) +{ + merge_queue.insert(dir->dirfrag()); +} + void MDBalancer::do_fragmenting() { if (split_queue.empty() && merge_queue.empty()) { diff --git a/src/mds/MDBalancer.h b/src/mds/MDBalancer.h index e4eb530b4494a..2b983787a07cb 100644 --- a/src/mds/MDBalancer.h +++ b/src/mds/MDBalancer.h @@ -117,6 +117,7 @@ public: void dump_pop_map(); void queue_split(CDir *dir); + void queue_merge(CDir *dir); }; diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index af6e3afa5e1d3..4e851fe005064 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1698,7 +1698,10 @@ do { \ CDir *dir = ls.front(); if (!dir->get_parent_dir()) continue; // must be linked. if (!dir->is_auth()) continue; // must be auth. - mdcache->split_dir(dir, 1);// + (rand() % 3)); + if (dir->get_frag() == frag_t() || (rand() % 3 == 0)) { + mdcache->split_dir(dir, 1); + } else + balancer->queue_merge(dir); } // hack: force hash root? -- 2.39.5