You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 04:00:16 UTC
svn commit: r1181340 - in
/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase:
master/ZKUnassignedWatcher.java zookeeper/ZooKeeperWrapper.java
Author: nspiegelberg
Date: Tue Oct 11 02:00:16 2011
New Revision: 1181340
URL: http://svn.apache.org/viewvc?rev=1181340&view=rev
Log:
HBASE 2866 Region permanently offline
Summary:
https://issues.apache.org/jira/browse/HBASE-2866
Test Plan:
Ran the unit tests
DiffCamp Revision: 137096
Reviewed By: kannan
CC: kannan, hbase@lists
Revert Plan:
OK
Modified:
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java?rev=1181340&r1=1181339&r2=1181340&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java Tue Oct 11 02:00:16 2011
@@ -169,6 +169,7 @@ public class ZKUnassignedWatcher impleme
String region = zNodePath.substring(
zNodePath.indexOf(rgnInTransitNode) + rgnInTransitNode.length() + 1);
HBaseEventType rsEvent = HBaseEventType.fromByte(data[0]);
+ LOG.debug("Got event type [ " + rsEvent + " ] for region " + region);
// if the node was CLOSED then handle it
if(rsEvent == HBaseEventType.RS2ZK_REGION_CLOSED) {
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java?rev=1181340&r1=1181339&r2=1181340&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java Tue Oct 11 02:00:16 2011
@@ -1133,22 +1133,36 @@ public class ZooKeeperWrapper implements
return;
}
- if(LOG.isDebugEnabled()) {
- // Check existing state for logging purposes.
- Stat stat = new Stat();
- byte[] oldData = null;
- try {
- oldData = readZNode(znode, stat);
- } catch (IOException e) {
- LOG.error("Error reading data for " + znode);
- }
- if(oldData == null) {
- LOG.debug("While updating UNASSIGNED region " + regionName + " - node exists with no data" );
- }
- else {
- LOG.debug("While updating UNASSIGNED region " + regionName + " exists, state = " + (HBaseEventType.fromByte(oldData[0])));
- }
+ Stat stat = new Stat();
+ byte[] oldData = null;
+ try {
+ oldData = readZNode(znode, stat);
+ } catch (IOException e) {
+ LOG.error("Error reading data for " + znode);
+ }
+ // If there is no data in the ZNode, then update it
+ if(oldData == null) {
+ LOG.debug("While updating UNASSIGNED region " + regionName + " - node exists with no data" );
+ }
+ // If there is data in the ZNode, do not update if it is already correct
+ else {
+ HBaseEventType curState = HBaseEventType.fromByte(oldData[0]);
+ HBaseEventType newState = HBaseEventType.fromByte(data[0]);
+ // If the znode has the right state already, do not update it. Updating
+ // the znode again and again will bump up the zk version. This may cause
+ // the region server to fail. The RS expects that the znode is never
+ // updated by anyone else while it is opening/closing a region.
+ if(curState == newState) {
+ LOG.debug("No need to update UNASSIGNED region " + regionName +
+ " as it already exists in state = " + curState);
+ return;
+ }
+
+ // If the ZNode is in another state, then update it
+ LOG.debug("UNASSIGNED region " + regionName + " is currently in state = " +
+ curState + ", updating it to " + newState);
}
+ // Update the ZNode
synchronized(unassignedZNodesWatched) {
unassignedZNodesWatched.add(znode);
try {