You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "rajeshbabu (JIRA)" <ji...@apache.org> on 2013/05/06 21:00:17 UTC
[jira] [Updated] (HBASE-8353) -ROOT-/.META. regions are hanging if
master restarted while closing -ROOT-/.META. regions on dead RS
[ https://issues.apache.org/jira/browse/HBASE-8353?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
rajeshbabu updated HBASE-8353:
------------------------------
Attachment: HBASE-8353_94_3.patch
In the latest patch
1)addressed Lars comment.
2)Changed origin of M_ZK_REGION_OFFLINE and M_ZK_REGION_CLOSING nodes to target region server but the logic in process RIT of M_ZK_REGION_CLOSING kept as it ease to handle rolling restart cases. Any way changing origin of M_ZK_REGION_OFFLINE does not effect much.
3)Added some more tests to check rolling restart scenarios.
Please review.
> -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_3.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