You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Xiaolin Ha (Jira)" <ji...@apache.org> on 2022/03/21 02:34:00 UTC
[jira] [Created] (HBASE-26872) Load rate calculator for cost functions should be more precise
Xiaolin Ha created HBASE-26872:
----------------------------------
Summary: Load rate calculator for cost functions should be more precise
Key: HBASE-26872
URL: https://issues.apache.org/jira/browse/HBASE-26872
Project: HBase
Issue Type: Improvement
Components: Balancer
Affects Versions: 2.4.11
Reporter: Xiaolin Ha
Assignee: Xiaolin Ha
The rate calculator should avoid negative values, e.g. if a region is moved from RS1 to RS2, the request count loads in the balancer cache maybe [100,200,0,100,200], then the region load cost calculated by CostFromRegionLoadAsRateFunction#getRegionLoadCost will be (100-200+100+100)/4=25, while the real cost is (100+100+200)/4=100.
{code:java}
protected double getRegionLoadCost(Collection<BalancerRegionLoad> regionLoadList) {
Iterator<BalancerRegionLoad> iter = regionLoadList.iterator();
if (!iter.hasNext()) {
return 0;
}
double previous = getCostFromRl(iter.next());
if (!iter.hasNext()) {
return 0;
}
double cost = 0;
do {
double current = getCostFromRl(iter.next());
cost += current - previous;
previous = current;
} while (iter.hasNext());
return Math.max(0, cost / (regionLoadList.size() - 1));
} {code}
We should change the cost accumulate codes to,
{code:java}
cost += current >= previous ? current - previous : current; {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)