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

rajeshbabu commented on HBASE-6317:
-----------------------------------

@Jimmy,
bq.  I prefer to isolate the change in EnableTableHandler and don't touch 
AssignmentManager.
Ok.
One scenario need to handle in AssignmentManager,any way its done in HBASE-6381.
If all the tables are in ENABLING or ENABLING+DISABLED, we are considering it 
as a clean cluster startup and assigning all ENABLING table regions again(which 
may cause inconsistency). This has handled in HBASE-6381 by delegating ENABLING 
table regions assignment to EnableTableHanler.


bq. So we don't need to pass masterrestart around. We can update the region 
plan only in EnableTableHandler.
Select the regions not assigned and not in transition, we can update their 
plans in EnableTableHandler only, But in BulkEnabler we dont know whether its 
roundroblinassignment or normal assignment. Instead of passing masterrestart 
around, can we do like below in ETH to ignore roundrobinassignment? (master 
restart flag is there in EnableTableHandler only)
{code}
    boolean roundRobinAssignment = false;
    if(this.masterRestart){
      roundRobinAssignment = this.server.getConfiguration().getBoolean(
          "hbase.master.enabletable.roundrobin", false);
      
this.server.getConfiguration().setBoolean("hbase.master.enabletable.roundrobin",
 false);
    }
    BulkEnabler bd = new BulkEnabler(this.server, regions,
        countOfRegionsInTable);
    try {
      if (bd.bulkAssign()) {
        done = true;
      }
    } catch (InterruptedException e) {
      LOG.warn("Enable operation was interrupted when enabling table '"
        + this.tableNameStr + "'");
      // Preserve the interrupt.
      Thread.currentThread().interrupt();
    } finally {
      
this.server.getConfiguration().setBoolean("hbase.master.enabletable.roundrobin",
          roundRobinAssignment);
    }
{code}


                
> Master clean start up and Partially enabled tables make region assignment 
> inconsistent.
> ---------------------------------------------------------------------------------------
>
>                 Key: HBASE-6317
>                 URL: https://issues.apache.org/jira/browse/HBASE-6317
>             Project: HBase
>          Issue Type: Bug
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: rajeshbabu
>             Fix For: 0.96.0, 0.92.3, 0.94.3
>
>         Attachments: HBASE-6317_94_3.patch, HBASE-6317_94.patch, 
> HBASE-6317_trunk_2.patch
>
>
> If we have a  table in partially enabled state (ENABLING) then on HMaster 
> restart we treat it as a clean cluster start up and do a bulk assign.  
> Currently in 0.94 bulk assign will not handle ALREADY_OPENED scenarios and it 
> leads to region assignment problems.  Analysing more on this we found that we 
> have better way to handle these scenarios.
> {code}
> if (false == checkIfRegionBelongsToDisabled(regionInfo)
>             && false == checkIfRegionsBelongsToEnabling(regionInfo)) {
>           synchronized (this.regions) {
>             regions.put(regionInfo, regionLocation);
>             addToServers(regionLocation, regionInfo);
>           }
> {code}
> We dont add to regions map so that enable table handler can handle it.  But 
> as nothing is added to regions map we think it as a clean cluster start up.
> Will come up with a patch tomorrow.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to