Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-23078

BaseLoadBalancer should consider region replicas when randomAssignment and roundRobinAssignment

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.0.0-alpha-1, 2.3.0, 2.2.2
    • Component/s: None
    • Labels:
      None

      Description

      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...

      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);
        }
      

      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.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                zghao Guanghao Zhang
                Reporter:
                zghao Guanghao Zhang
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: