MCPcopy Create free account
hub / github.com/baidu/tera / LoadBalance

Method LoadBalance

src/master/master_impl.cc:1698–1760  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1696}
1697
1698void MasterImpl::LoadBalance() {
1699 {
1700 MutexLock locker(&mutex_);
1701 if (!load_balance_enabled_) {
1702 load_balance_scheduled_ = false;
1703 return;
1704 }
1705 }
1706
1707 LOG(INFO) << "LoadBalance start";
1708 int64_t start_time = get_micros();
1709
1710 std::vector<TablePtr> all_table_list;
1711 std::vector<TabletPtr> all_tablet_list;
1712 tablet_manager_->ShowTable(&all_table_list, &all_tablet_list);
1713
1714 std::vector<TabletNodePtr> all_node_list;
1715 tabletnode_manager_->GetAllTabletNodeInfo(&all_node_list);
1716
1717 // Make a constant copy of tablet nodes to make sure that the returned value
1718 // of GetSize, GetQps, ... remain unchanged every time they are called during
1719 // the load balance process so as not to cause exceptions of std::sort().
1720 std::vector<TabletNodePtr> all_node_list_copy;
1721 for (size_t i = 0; i < all_node_list.size(); i++) {
1722 TabletNodePtr node_copy(new TabletNode(*all_node_list[i]));
1723 all_node_list_copy.push_back(node_copy);
1724 }
1725
1726 uint32_t max_move_num = FLAGS_tera_master_max_move_concurrency;
1727
1728 // Run qps-based-sheduler first, then size-based-scheduler
1729 // If read_pending occured, process it first
1730 max_move_num -=
1731 LoadBalance(load_scheduler_.get(), max_move_num, 1, all_node_list_copy, all_tablet_list);
1732
1733 if (FLAGS_tera_master_load_balance_table_grained) {
1734 for (size_t i = 0; i < all_table_list.size(); ++i) {
1735 TablePtr table = all_table_list[i];
1736 if (table->GetStatus() != kTableEnable) {
1737 continue;
1738 }
1739 if (table->GetTableName() == FLAGS_tera_master_meta_table_name) {
1740 continue;
1741 }
1742
1743 std::vector<TabletPtr> tablet_list;
1744 table->GetTablet(&tablet_list);
1745 max_move_num -= LoadBalance(size_scheduler_.get(), max_move_num, 3, all_node_list_copy,
1746 tablet_list, table->GetTableName());
1747 }
1748 } else {
1749 max_move_num -=
1750 LoadBalance(size_scheduler_.get(), max_move_num, 3, all_node_list_copy, all_tablet_list);
1751 }
1752
1753 int64_t cost_time = get_micros() - start_time;
1754 LOG(INFO) << "LoadBalance finish, cost " << cost_time / 1000000.0 << "s";
1755

Callers

nothing calls this directly

Calls 15

ShowTableMethod · 0.80
GetAllTabletNodeInfoMethod · 0.80
push_backMethod · 0.80
GetTableNameMethod · 0.80
GetServerAddrMethod · 0.80
NeedScheduleMethod · 0.80
DescendingSortMethod · 0.80
FindTabletNodeMethod · 0.80
get_microsFunction · 0.50
sizeMethod · 0.45
getMethod · 0.45
GetStatusMethod · 0.45

Tested by

no test coverage detected