[ https://issues.apache.org/jira/browse/HBASE-7103?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13494825#comment-13494825 ]
stack commented on HBASE-7103: ------------------------------ [~ram_krish] I don't think it possible getting version on create (Let me ask one of the zk lads). That is why we do the SPLITTING to SPLITTING transition to get the versoin. Its true though that there is a hole in here because if we fail on create, there should be no rollback but if we fail moving SPLITTING to SPLITTING, then we should remove the created znode but ONLY if we have its version (it could have been created by someone else). Maybe when we create, we write some unique data into the znode and get it after creating it to see what the version is -- and if the unique data is not the same, we know that someone else owns the znode and we should not rollback .... but that won't work either given it won't be backward compatible. If we fail the create of the znode, we should not rollback. It looks like we are doing that now since adding the STARTED_SPLITTING state -- right? That seems wrong... should we be inserting the STARTED_SPLITTING state after the create of the znode? But even then, I'm not sure about deleting a znode unless we are sure we own it -- that the version matches. Should the following code be checking we did NOT get a -1? {code} this.znodeVersion = createNodeSplitting(server.getZooKeeper(), this.parent.getRegionInfo(), server.getServerName()); {code} It seems like createNodeSplitting could be returning -1 if it fails. (Weird that transitionNode has explicit mention of M_ZK_REGION_OFFLINE and RS_ZK_REGION_OPENING though it takes beginState and endState but that is another issue). > Need to fail split if SPLIT znode is deleted even before the split is > completed. > -------------------------------------------------------------------------------- > > Key: HBASE-7103 > URL: https://issues.apache.org/jira/browse/HBASE-7103 > Project: HBase > Issue Type: Bug > Reporter: ramkrishna.s.vasudevan > Assignee: ramkrishna.s.vasudevan > Fix For: 0.94.3, 0.96.0 > > Attachments: 7103-6088-revert.txt, HBASE-7103_testcase.patch > > > This came up after the following mail in dev list > 'infinite loop of RS_ZK_REGION_SPLIT on .94.2'. > The following is the reason for the problem > The following steps happen > -> Initially the parent region P1 starts splitting. > -> The split is going on normally. > -> Another split starts at the same time for the same region P1. (Not sure > why this started). > -> Rollback happens seeing an already existing node. > -> This node gets deleted in rollback and nodeDeleted Event starts. > -> In nodeDeleted event the RIT for the region P1 gets deleted. > -> Because of this there is no region in RIT. > -> Now the first split gets over. Here the problem is we try to transit the > node to SPLITTING to SPLIT. But the node even does not exist. > But we don take any action on this. We think it is successful. > -> Because of this SplitRegionHandler never gets invoked. -- 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