[ https://issues.apache.org/jira/browse/HBASE-8353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13634850#comment-13634850 ]
rajeshbabu commented on HBASE-8353: ----------------------------------- in unassign of a region 1) create closing node 2) send close request to the server holding the region. one more problem here is if master restarted before 2nd step there is a possible double assignment if the RS holding the region is online. in processRegionInTransition we need to make a decision whether to call unassign or just to add to rit. In case of catalog regions unassign itself fails because online regions map dont have it. > -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.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