[ https://issues.apache.org/jira/browse/HBASE-4880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13163953#comment-13163953 ]
stack commented on HBASE-4880: ------------------------------ @Zhihong We need to fix the above split issue if we refactor so we only put region online as last step? > Region is on service before completing openRegionHanlder, may cause data loss > ----------------------------------------------------------------------------- > > Key: HBASE-4880 > URL: https://issues.apache.org/jira/browse/HBASE-4880 > Project: HBase > Issue Type: Bug > Reporter: chunhui shen > Assignee: chunhui shen > Attachments: hbase-4880.patch > > > OpenRegionHandler in regionserver is processed as the following steps: > {code} > 1.openregion()(Through it, closed = false, closing = false) > 2.addToOnlineRegions(region) > 3.update .meta. table > 4.update ZK's node state to RS_ZK_REGION_OPEND > {code} > We can find that region is on service before Step 4. > It means client could put data to this region after step 3. > What will happen if step 4 is failed processing? > It will execute OpenRegionHandler#cleanupFailedOpen which will do closing > region, and master assign this region to another regionserver. > If closing region is failed, the data which is put between step 3 and step 4 > may loss, because the region has been opend on another regionserver and be > put new data. Therefore, it may not be recoverd through replayRecoveredEdit() > because the edit's LogSeqId is smaller than current region SeqId. -- 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