[ https://issues.apache.org/jira/browse/HBASE-8353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13635792#comment-13635792 ]
Lars Hofhansl commented on HBASE-8353: -------------------------------------- Nit: {code} + regionsInTransition.put(encodedRegionName, new RegionState(regionInfo, + RegionState.State.CLOSING, data.getStamp(), serverName)); + unassign(regionInfo, + new RegionState(regionInfo, RegionState.State.CLOSING, data.getStamp(), serverName), + expectedVersion, serverName); {code} This would look nicer if we only created the RegionState once and passed it to both methods. Can do on commit. > -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