HBASE-18164 Fast locality computation in balancer - addendum handles NaN
-Added new LocalityCostFunction and LocalityCandidateGenerator that cache localities of every region/rack combination and mappings of every region to its most local server and to its most local rack. -Made LocalityCostFunction incremental so that it only computes locality based on most recent region moves/swaps, rather than recomputing the locality of every region in the cluster at every iteration of the balancer -Changed locality cost function to reflect the ratio of: (Current locality) / (Best locality possible given current cluster) Signed-off-by: tedyu <yuzhihong@gmail.com>
This commit is contained in:
parent
44c9c1de99
commit
b4c3fe9763
|
@ -1286,8 +1286,9 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// We normalize locality to be a score between 0 and 1.0 representing how good it
|
// We normalize locality to be a score between 0 and 1.0 representing how good it
|
||||||
// is compared to how good it could be
|
// is compared to how good it could be. If bestLocality is 0, assume locality is 100
|
||||||
locality /= bestLocality;
|
// (and the cost is 0)
|
||||||
|
locality = bestLocality == 0 ? 1 : locality / bestLocality;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1298,7 +1299,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double localityDelta = getWeightedLocality(region, newEntity) - getWeightedLocality(region, oldEntity);
|
double localityDelta = getWeightedLocality(region, newEntity) - getWeightedLocality(region, oldEntity);
|
||||||
double normalizedDelta = localityDelta / bestLocality;
|
double normalizedDelta = bestLocality == 0 ? 0.0 : localityDelta / bestLocality;
|
||||||
locality += normalizedDelta;
|
locality += normalizedDelta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue