#include "MDBalancer.h"
#include "MDS.h"
+#include "mon/MonClient.h"
#include "MDSMap.h"
#include "CInode.h"
#include "CDir.h"
#include "include/Context.h"
#include "msg/Messenger.h"
#include "messages/MHeartbeat.h"
+#include "messages/MMDSLoadTargets.h"
#include <vector>
#include <map>
}
}
}
+ send_targets_message();
try_rebalance();
}
void MDBalancer::try_rebalance()
{
+ //check if the current MonMap has all our targets
+ for (map<int,double>::iterator i = my_targets.begin();
+ i != my_targets.end();
+ ++i) {
+ if (!mds->mdsmap->get_mds_info(mds->messenger->get_myaddr()).
+ export_targets.count(i->first)) {
+ //can't rebalance until it has all our targets!
+ dout(10) << "MDBalancer::try_rebalance can't rebalance when mds is missing some of our targets! Resending targets message" << dendl;
+ send_targets_message();
+ return;
+ }
+ }
+ //Hurrah, all our targets are included in MDSMap! Proceed
+
+ //if the MDSMap has old targets we don't want...
+ if (mds->mdsmap->get_mds_info(mds->messenger->get_myaddr()).
+ export_targets.size() != my_targets.size())
+ send_targets_message();
+
// make a sorted list of my imports
map<double,CDir*> import_pop_map;
multimap<int,CDir*> import_from_map;
}
dout(5) << "rebalance done" << dendl;
+ send_offload_complete_message();
show_imports();
-
}
-
+inline void MDBalancer::send_targets_message()
+{
+ MMDSLoadTargets* m = new MMDSLoadTargets(my_targets);
+ mds->monc->send_mon_message(m);
+}
void MDBalancer::find_exports(CDir *dir,
double amount,
}
-
-
-
void MDBalancer::hit_inode(utime_t now, CInode *in, int type, int who)
{
// hit inode