You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Guanghao Zhang (Jira)" <ji...@apache.org> on 2019/10/16 07:18:00 UTC

[jira] [Resolved] (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 resolved HBASE-23078.
------------------------------------
    Fix Version/s: 2.2.2
                   2.3.0
                   3.0.0
       Resolution: Fixed

> 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
>             Fix For: 3.0.0, 2.3.0, 2.2.2
>
>
> 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)