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

chunhui shen commented on HBASE-5179:
-------------------------------------

@Zhihong
For the first question: this.serverManager.isServerOnline() returns true and 
catalogTracker.verifyMetaRegionLocation(timeout) returns false, if the meta 
server is really dead and we assign meta without splitting log, causing meta 
data loss. 

Through the following code:
{code}
 if (!catalogTracker.verifyRootRegionLocation(timeout)) {
      ServerName currentRootServer = this.catalogTracker.getRootLocation();
      if (expireIfOnline(currentRootServer)) {
        // We are expiring this server. The processing of expiration will assign
        // root so don't do it here.
        expiredServer = currentRootServer;
      } else {
        // Root was not on an online server when we failed verification
        this.assignmentManager.assignRoot();
      }


private boolean expireIfOnline(final ServerName sn) {
    if (sn == null) return false;
    if (!this.serverManager.isServerOnline(sn)) return false;
    LOG.info("Forcing expiration of " + sn);
    this.serverManager.expireServer(sn);
    return true;
  }
{code}

We could find currentRootServer is considered dead, with the same condition, 
could we consider  currentMetaServer dead?



                
> Concurrent processing of processFaileOver and ServerShutdownHandler may cause 
> region to be assigned before log splitting is completed, causing data loss
> --------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-5179
>                 URL: https://issues.apache.org/jira/browse/HBASE-5179
>             Project: HBase
>          Issue Type: Bug
>          Components: master
>    Affects Versions: 0.90.2
>            Reporter: chunhui shen
>            Assignee: chunhui shen
>            Priority: Critical
>             Fix For: 0.92.0, 0.94.0, 0.90.6
>
>         Attachments: 5179-90.txt, 5179-90v2.patch, 5179-90v3.patch, 
> 5179-90v4.patch, 5179-90v5.patch, 5179-90v6.patch, 5179-90v7.patch, 
> 5179-90v8.patch, 5179-90v9.patch, 5179-v2.txt, 5179-v3.txt, 5179-v4.txt, 
> hbase-5179.patch, hbase-5179v5.patch, hbase-5179v6.patch, hbase-5179v7.patch, 
> hbase-5179v8.patch, hbase-5179v9.patch
>
>
> If master's processing its failover and ServerShutdownHandler's processing 
> happen concurrently, it may appear following  case.
> 1.master completed splitLogAfterStartup()
> 2.RegionserverA restarts, and ServerShutdownHandler is processing.
> 3.master starts to rebuildUserRegions, and RegionserverA is considered as 
> dead server.
> 4.master starts to assign regions of RegionserverA because it is a dead 
> server by step3.
> However, when doing step4(assigning region), ServerShutdownHandler may be 
> doing split log, Therefore, it may cause data loss.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to