You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2011/11/23 19:06:06 UTC
svn commit: r1205514 - in /hbase/branches/0.92: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java
Author: ramkrishna
Date: Wed Nov 23 18:06:05 2011
New Revision: 1205514
URL: http://svn.apache.org/viewvc?rev=1205514&view=rev
Log:
HBASE-4308 Race between RegionOpenedHandler and AssignmentManager (Ram)
Modified:
hbase/branches/0.92/CHANGES.txt
hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java
Modified: hbase/branches/0.92/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/CHANGES.txt?rev=1205514&r1=1205513&r2=1205514&view=diff
==============================================================================
--- hbase/branches/0.92/CHANGES.txt (original)
+++ hbase/branches/0.92/CHANGES.txt Wed Nov 23 18:06:05 2011
@@ -439,6 +439,7 @@ Release 0.92.0 - Unreleased
running 0.20.205.0+
HBASE-4842 [hbck] Fix intermittent failures on TestHBaseFsck.testHBaseFsck
(Jon Hsieh)
+ HBASE-4308 Race between RegionOpenedHandler and AssignmentManager (Ram)
TESTS
HBASE-4492 TestRollingRestart fails intermittently
Modified: hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1205514&r1=1205513&r2=1205514&view=diff
==============================================================================
--- hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Wed Nov 23 18:06:05 2011
@@ -966,16 +966,36 @@ public class AssignmentManager extends Z
ZKAssign.getRegionName(this.master.getZooKeeper(), path);
RegionState rs = this.regionsInTransition.get(regionName);
if (rs != null) {
+ HRegionInfo regionInfo = rs.getRegion();
if (rs.isSplitting() || rs.isSplit()) {
LOG.debug("Ephemeral node deleted, regionserver crashed?, " +
"clearing from RIT; rs=" + rs);
clearRegionFromTransition(rs.getRegion());
} else {
- LOG.warn("Node deleted but still in RIT: " + rs);
+ LOG.debug("The znode of region " + regionInfo.getRegionNameAsString()
+ + " has been deleted.");
+ if (rs.isOpened()) {
+ makeRegionOnline(rs, regionInfo);
+ }
}
}
}
}
+
+ private void makeRegionOnline(RegionState rs, HRegionInfo regionInfo) {
+ regionOnline(regionInfo, rs.serverName);
+ LOG.info("The master has opened the region "
+ + regionInfo.getRegionNameAsString() + " that was online on "
+ + rs.serverName);
+ if (this.getZKTable().isDisablingOrDisabledTable(
+ regionInfo.getTableNameAsString())) {
+ debugLog(regionInfo, "Opened region "
+ + regionInfo.getRegionNameAsString() + " but "
+ + "this table is disabled, triggering close of region");
+ unassign(regionInfo);
+ }
+ }
+
/**
* New unassigned node has been created.
Modified: hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java?rev=1205514&r1=1205513&r2=1205514&view=diff
==============================================================================
--- hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java (original)
+++ hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java Wed Nov 23 18:06:05 2011
@@ -26,7 +26,6 @@ import org.apache.hadoop.hbase.HRegionIn
import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.executor.EventHandler;
-import org.apache.hadoop.hbase.executor.EventHandler.EventType;
import org.apache.hadoop.hbase.master.AssignmentManager;
import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
@@ -98,28 +97,26 @@ public class OpenedRegionHandler extends
// Code to defend against case where we get SPLIT before region open
// processing completes; temporary till we make SPLITs go via zk -- 0.92.
RegionState regionState = this.assignmentManager.isRegionInTransition(regionInfo);
+ boolean openedNodeDeleted = false;
if (regionState != null
&& regionState.getState().equals(RegionState.State.OPEN)) {
- if (deleteOpenedNode(expectedVersion)) {
- // Remove region from in-memory transition and unassigned node from ZK
- this.assignmentManager.regionOnline(regionInfo, this.sn);
- debugLog(regionInfo, "The master has opened the region " +
- regionInfo.getRegionNameAsString() + " that was online on " +
- this.sn.toString());
- } else {
- LOG.error("The znode of region " + regionInfo.getRegionNameAsString() +
- " could not be deleted.");
+ openedNodeDeleted = deleteOpenedNode(expectedVersion);
+ if (!openedNodeDeleted) {
+ LOG.error("The znode of region " + regionInfo.getRegionNameAsString()
+ + " could not be deleted.");
}
} else {
LOG.warn("Skipping the onlining of " + regionInfo.getRegionNameAsString() +
" because regions is NOT in RIT -- presuming this is because it SPLIT");
}
- if (this.assignmentManager.getZKTable().isDisablingOrDisabledTable(
- regionInfo.getTableNameAsString())) {
- debugLog(regionInfo,
- "Opened region " + regionInfo.getRegionNameAsString() + " but "
- + "this table is disabled, triggering close of region");
- assignmentManager.unassign(regionInfo);
+ if (!openedNodeDeleted) {
+ if (this.assignmentManager.getZKTable().isDisablingOrDisabledTable(
+ regionInfo.getTableNameAsString())) {
+ debugLog(regionInfo, "Opened region "
+ + regionInfo.getRegionNameAsString() + " but "
+ + "this table is disabled, triggering close of region");
+ assignmentManager.unassign(regionInfo);
+ }
}
}