[ 
https://issues.apache.org/jira/browse/HBASE-20741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16594102#comment-16594102
 ] 

huaxiang sun commented on HBASE-20741:
--------------------------------------

[~ram_krish], it looks good to me. One quick question. For the following new 
logic, if numServers is small, is it possible that it will not find one RS 
which does not have a replica assigned? 

{code}
    OUTER : for (RegionInfo region : unassignedRegions) {
      boolean assigned = false;
      INNER : for (int j = 0; j < numServers; j++) { // try all servers one by 
one
        ServerName serverName = servers.get((j + serverIdx) % numServers);
        if (!cluster.wouldLowerAvailability(region, serverName)) {
          List<RegionInfo> serverRegions =
              assignments.computeIfAbsent(serverName, k -> new ArrayList<>());
          if (!RegionReplicaUtil.isDefaultReplica(region.getReplicaId())) {
            // if the region is not a default replica
            // check if the assignments map has the other replica region on 
this server
            for (RegionInfo hri : serverRegions) {
              if (RegionReplicaUtil.isReplicasForSameRegion(region, hri)) {
                if (LOG.isTraceEnabled()) {
                  LOG.trace("Skipping the server, " + serverName
                      + " , got the same server for the region " + region);
                }
                // do not allow this case. The unassignedRegions we got because 
the
                // replica region in this list was not assigned because of 
lower availablity issue.
                // So when we assign here we should ensure that as far as 
possible the server being
                // selected does not have the server where the replica region 
was not assigned.
                continue INNER; // continue the inner loop, ie go to the next 
server
              }
            }
          }
{code}

> Split of a region with replicas creates all daughter regions and its replica 
> in same server
> -------------------------------------------------------------------------------------------
>
>                 Key: HBASE-20741
>                 URL: https://issues.apache.org/jira/browse/HBASE-20741
>             Project: HBase
>          Issue Type: Bug
>          Components: read replicas
>    Affects Versions: 3.0.0, 2.0.0
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: ramkrishna.s.vasudevan
>            Priority: Major
>             Fix For: 3.0.0, 2.2.0
>
>         Attachments: HBASE-20741.patch, HBASE-20741_1.patch, 
> HBASE-20741_2.patch, HBASE-20741_2.patch
>
>
> Generally it is better that the parent region when split creates the daughter 
> region in the same target server. 
> But for replicas also we do the same and all the replica regions are created 
> in the same target server. We should ideally be doing a round robin and only 
> the primary daughter region should be opened in the intended target server 
> (where the parent was previously opened).
> [~huaxiang] FYI.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to