| 1696 | } |
| 1697 | |
| 1698 | void 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 |
nothing calls this directly
no test coverage detected