[ https://issues.apache.org/jira/browse/HBASE-8353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13636129#comment-13636129 ]
rajeshbabu commented on HBASE-8353: ----------------------------------- @Ram, bq. If the region is not a metaTable and we don't get the Server name from the regions map we take the origin from the data. In rebuildUserRegions we will populate the regions map. In case of disabling or enabled we add the region to regions map(which is any way read from .META.). A region in M_ZK_REGION_CLOSING state only in disabling/balance(ENABLED) only, so its always available in regions map and we can get the proper server where its assigned previously. Lets suppose if we change the origin to target server, during rolling restart we may face most of the issues like double assignments mentioned in above comments, because latest version sees master as origin. Otherwise it will be good only. > -ROOT-/.META. regions are hanging if master restarted while closing > -ROOT-/.META. regions on dead RS > ---------------------------------------------------------------------------------------------------- > > Key: HBASE-8353 > URL: https://issues.apache.org/jira/browse/HBASE-8353 > Project: HBase > Issue Type: Bug > Components: Region Assignment > Affects Versions: 0.94.6 > Reporter: rajeshbabu > Assignee: rajeshbabu > Fix For: 0.94.8 > > Attachments: HBASE-8353_94_2.patch, HBASE-8353_94.patch > > > ROOT/META are not getting assigned if master restarted while closing > ROOT/META. > Lets suppose catalog table regions in M_ZK_REGION_CLOSING state during master > initialization and then just we are adding the them to RIT and waiting for > TM. {code} > if (isOnDeadServer(regionInfo, deadServers) && > (data.getOrigin() == null || > !serverManager.isServerOnline(data.getOrigin()))) { > // If was on dead server, its closed now. Force to OFFLINE and this > // will get it reassigned if appropriate > forceOffline(regionInfo, data); > } else { > // Just insert region into RIT. > // If this never updates the timeout will trigger new assignment > regionsInTransition.put(encodedRegionName, new RegionState( > regionInfo, RegionState.State.CLOSING, > data.getStamp(), data.getOrigin())); > } > {code} > isOnDeadServer always return false to ROOT/META because deadServers is null. > Even TM cannot close them properly because its not available in online > regions since its not yet assigned. > {code} > synchronized (this.regions) { > // Check if this region is currently assigned > if (!regions.containsKey(region)) { > LOG.debug("Attempted to unassign region " + > region.getRegionNameAsString() + " but it is not " + > "currently assigned anywhere"); > return; > } > } > {code} -- 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