You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Guanghao Zhang (Jira)" <ji...@apache.org> on 2019/09/29 02:45:00 UTC
[jira] [Updated] (HBASE-23078) BaseLoadBalancer should consider
region replicas when randomAssignment and roundRobinAssignment
[ https://issues.apache.org/jira/browse/HBASE-23078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guanghao Zhang updated HBASE-23078:
-----------------------------------
Issue Type: Bug (was: Task)
> BaseLoadBalancer should consider region replicas when randomAssignment and roundRobinAssignment
> -----------------------------------------------------------------------------------------------
>
> Key: HBASE-23078
> URL: https://issues.apache.org/jira/browse/HBASE-23078
> Project: HBase
> Issue Type: Bug
> Reporter: Guanghao Zhang
> Assignee: Guanghao Zhang
> Priority: Major
>
> Copied the comment in HBASE-23035.
>
> There are two problems about the LoadBalancer.
>
> 1. The cluster means the cluster state of the whole cluster. But hasRegionReplica is false, so it only create clusterstate by the regions which need to assign, not the whole cluster...
> {code:java}
> Cluster cluster = createCluster(servers, regions, false);
> List<RegionInfo> unassignedRegions = new ArrayList<>();
> roundRobinAssignment(cluster, regions, unassignedRegions,
> servers, assignments);
> protected Cluster createCluster(List<ServerName> servers, Collection<RegionInfo> regions,
> boolean hasRegionReplica) {
> // Get the snapshot of the current assignments for the regions in question, and then create
> // a cluster out of it. Note that we might have replicas already assigned to some servers
> // earlier. So we want to get the snapshot to see those assignments, but this will only contain
> // replicas of the regions that are passed (for performance).
> Map<ServerName, List<RegionInfo>> clusterState = null;
> if (!hasRegionReplica) {
> clusterState = getRegionAssignmentsByServer(regions);
> } else {
> // for the case where we have region replica it is better we get the entire cluster's snapshot
> clusterState = getRegionAssignmentsByServer(null);
> } for (ServerName server : servers) {
> if (!clusterState.containsKey(server)) {
> clusterState.put(server, EMPTY_REGION_LIST);
> }
> }
> return new Cluster(regions, clusterState, null, this.regionFinder,
> rackManager);
> }
> {code}
> 2. wouldLowerAvailability method only consider the primary regions. The replica region can't assign to same server with primary region. But can be assigned to same server with other replica regions.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)