You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/08/29 19:51:44 UTC
svn commit: r1162919 - in /hbase/trunk: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
Author: stack
Date: Mon Aug 29 17:51:44 2011
New Revision: 1162919
URL: http://svn.apache.org/viewvc?rev=1162919&view=rev
Log:
HBASE-4124 ZK restarted while a region is being assigned, new active HM re-assigns it but the RS warns 'already online on this server'
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1162919&r1=1162918&r2=1162919&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Aug 29 17:51:44 2011
@@ -496,6 +496,9 @@ Release 0.90.5 - Unreleased
HBASE-4253 TestScannerTimeOut.test3686a and TestHTablePool.
testReturnDifferentTable() failure because of using new
HTable(tablename) (ramkrishna.s.vasudevan)
+ HBASE-4124 ZK restarted while a region is being assigned, new active HM
+ re-assigns it but the RS warns 'already online on this server'
+ (Gaojinchao)
IMPROVEMENT
HBASE-4205 Enhance HTable javadoc (Eric Charles)
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1162919&r1=1162918&r2=1162919&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Mon Aug 29 17:51:44 2011
@@ -369,8 +369,11 @@ public class AssignmentManager extends Z
synchronized (regionsInTransition) {
switch (data.getEventType()) {
case RS_ZK_REGION_CLOSING:
- if (isOnDeadServer(regionInfo, deadServers)) {
- // If was on dead server, its closed now. Force to OFFLINE and this
+ // If zk node of the region was updated by a live server skip this
+ // region and just add it into RIT.
+ 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 {
@@ -416,10 +419,10 @@ public class AssignmentManager extends Z
LOG.warn("Region in transition " + regionInfo.getEncodedName() +
" references a null server; letting RIT timeout so will be " +
"assigned elsewhere");
- break;
- }
- if (isOnDeadServer(regionInfo, deadServers)) {
- // If was on a dead server, then its not open any more; needs handling.
+ } else if (isOnDeadServer(regionInfo, deadServers) &&
+ !serverManager.isServerOnline(sn)) {
+ // If was on a dead server, then its not open any more; needs
+ // handling.
forceOffline(regionInfo, data);
} else {
new OpenedRegionHandler(master, this, regionInfo, sn).process();
@@ -1957,6 +1960,18 @@ public class AssignmentManager extends Z
Result result = region.getSecond();
// If region was in transition (was in zk) force it offline for reassign
try {
+ RegionTransitionData data = ZKAssign.getData(watcher,
+ regionInfo.getEncodedName());
+
+ // If zk node of this region has been updated by a live server,
+ // we consider that this region is being handled.
+ // So we should skip it and process it in processRegionsInTransition.
+ if (data != null && data.getOrigin() != null &&
+ serverManager.isServerOnline(data.getOrigin())) {
+ LOG.info("The region " + regionInfo.getEncodedName()
+ + "is being handled on " + data.getOrigin());
+ continue;
+ }
// Process with existing RS shutdown code
boolean assign =
ServerShutdownHandler.processDeadRegion(regionInfo, result, this,