{
int cluster_size = mds->get_mds_map()->get_num_mds();
int whoami = mds->get_nodeid();
- utime_t now = g_clock.now();
+ rebalance_time = g_clock.now();
dump_pop_map();
// rescale! turn my mds_load back into meta_load units
double load_fac = 1.0;
if (mds_load[whoami].mds_load() > 0) {
- double metald = mds_load[whoami].auth.meta_load(now);
+ double metald = mds_load[whoami].auth.meta_load(rebalance_time);
double mdsld = mds_load[whoami].mds_load();
load_fac = metald / mdsld;
dout(7) << " load_fac is " << load_fac
}
}
}
+ try_rebalance();
+}
+void MDBalancer::try_rebalance()
+{
// make a sorted list of my imports
map<double,CDir*> import_pop_map;
multimap<int,CDir*> import_from_map;
CDir *im = *it;
if (im->get_inode()->is_stray()) continue;
- double pop = im->pop_auth_subtree.meta_load(now);
+ double pop = im->pop_auth_subtree.meta_load(rebalance_time);
if (g_conf.mds_bal_idle_threshold > 0 &&
pop < g_conf.mds_bal_idle_threshold &&
im->inode != mds->mdcache->get_root() &&
if (dir->inode->is_root()) continue;
if (dir->is_freezing() || dir->is_frozen()) continue; // export pbly already in progress
- double pop = dir->pop_auth_subtree.meta_load(now);
+ double pop = dir->pop_auth_subtree.meta_load(rebalance_time);
assert(dir->inode->authority().first == target); // cuz that's how i put it in the map, dummy
if (pop <= amount-have) {
pot != candidates.end();
pot++) {
if ((*pot)->get_inode()->is_stray()) continue;
- find_exports(*pot, amount, exports, have, already_exporting, now);
+ find_exports(*pot, amount, exports, have, already_exporting);
if (have > amount-MIN_OFFLOAD)
break;
}
dout(-5) << " - exporting "
<< (*it)->pop_auth_subtree
<< " "
- << (*it)->pop_auth_subtree.meta_load(now)
+ << (*it)->pop_auth_subtree.meta_load(rebalance_time)
<< " to mds" << target
<< " " << **it
<< dendl;
double amount,
list<CDir*>& exports,
double& have,
- set<CDir*>& already_exporting,
- utime_t now)
+ set<CDir*>& already_exporting)
{
double need = amount - have;
if (need < amount * g_conf.mds_bal_min_start)
list<CDir*> bigger_rep, bigger_unrep;
multimap<double, CDir*> smaller;
- double dir_pop = dir->pop_auth_subtree.meta_load(now);
+ double dir_pop = dir->pop_auth_subtree.meta_load(rebalance_time);
dout(7) << " find_exports in " << dir_pop << " " << *dir << " need " << need << " (" << needmin << " - " << needmax << ")" << dendl;
double subdir_sum = 0;
if (subdir->is_frozen()) continue; // can't export this right now!
// how popular?
- double pop = subdir->pop_auth_subtree.meta_load(now);
+ double pop = subdir->pop_auth_subtree.meta_load(rebalance_time);
subdir_sum += pop;
dout(15) << " subdir pop " << pop << " " << *subdir << dendl;
it != bigger_unrep.end();
it++) {
dout(15) << " descending into " << **it << dendl;
- find_exports(*it, amount, exports, have, already_exporting, now);
+ find_exports(*it, amount, exports, have, already_exporting);
if (have > needmin)
return;
}
it != bigger_rep.end();
it++) {
dout(7) << " descending into replicated " << **it << dendl;
- find_exports(*it, amount, exports, have, already_exporting, now);
+ find_exports(*it, amount, exports, have, already_exporting);
if (have > needmin)
return;
}