[ https://issues.apache.org/jira/browse/HBASE-8353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13635350#comment-13635350 ]
Jimmy Xiang commented on HBASE-8353: ------------------------------------ [~rajesh23], if we don't change the origin, does this mean {quote} + if (regionInfo.isMetaTable() + && !serverManager.isServerOnline(data.getOrigin())) { + forceOffline(regionInfo, data); {quote} We always re-assign the meta table when the master restarts, if it's closing? I am ok with not changing the origin since it could be a compatibility issue. > -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