[ https://issues.apache.org/jira/browse/HBASE-23078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guanghao Zhang reassigned HBASE-23078: -------------------------------------- Assignee: Guanghao Zhang > 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: Task > 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)