You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2012/07/08 21:21:54 UTC
svn commit: r1358821 - in /hbase/branches/0.94/src:
main/java/org/apache/hadoop/hbase/regionserver/
test/java/org/apache/hadoop/hbase/regionserver/
Author: larsh
Date: Sun Jul 8 19:21:53 2012
New Revision: 1358821
URL: http://svn.apache.org/viewvc?rev=1358821&view=rev
Log:
HBASE-6329 Stopping META regionserver when splitting region could cause daughter region to be assigned twice (chunhui shen)
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1358821&r1=1358820&r2=1358821&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Sun Jul 8 19:21:53 2012
@@ -783,6 +783,11 @@ public class HRegionServer implements HR
this.hbaseMaster = null;
}
this.leases.close();
+
+ if (!killed) {
+ join();
+ }
+
try {
deleteMyEphemeralNode();
} catch (KeeperException e) {
@@ -792,9 +797,6 @@ public class HRegionServer implements HR
LOG.info("stopping server " + this.serverNameFromMasterPOV +
"; zookeeper connection closed.");
- if (!killed) {
- join();
- }
LOG.info(Thread.currentThread().getName() + " exiting");
}
@@ -1616,6 +1618,7 @@ public class HRegionServer implements HR
public void postOpenDeployTasks(final HRegion r, final CatalogTracker ct,
final boolean daughter)
throws KeeperException, IOException {
+ checkOpen();
LOG.info("Post open deploy tasks for region=" + r.getRegionNameAsString() +
", daughter=" + daughter);
// Do checks to see if we need to compact (references or too many files)
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java?rev=1358821&r1=1358820&r2=1358821&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java Sun Jul 8 19:21:53 2012
@@ -67,6 +67,13 @@ class SplitRequest implements Runnable {
st.execute(this.server, this.server);
this.server.getMetrics().incrementSplitSuccessCount();
} catch (Exception e) {
+ if (this.server.isStopping() || this.server.isStopped()) {
+ LOG.info(
+ "Skip rollback/cleanup of failed split of "
+ + parent.getRegionNameAsString() + " because server is"
+ + (this.server.isStopping() ? " stopping" : " stopped"), e);
+ return;
+ }
try {
LOG.info("Running rollback/cleanup of failed split of " +
parent.getRegionNameAsString() + "; " + e.getMessage(), e);
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java?rev=1358821&r1=1358820&r2=1358821&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java Sun Jul 8 19:21:53 2012
@@ -341,11 +341,6 @@ public class SplitTransaction {
boolean stopping = services != null && services.isStopping();
// TODO: Is this check needed here?
if (stopped || stopping) {
- // add 2nd daughter first (see HBASE-4335)
- MetaEditor.addDaughter(server.getCatalogTracker(),
- b.getRegionInfo(), services.getServerName());
- MetaEditor.addDaughter(server.getCatalogTracker(),
- a.getRegionInfo(), services.getServerName());
LOG.info("Not opening daughters " +
b.getRegionInfo().getRegionNameAsString() +
" and " +
@@ -396,7 +391,8 @@ public class SplitTransaction {
* @param a second daughter region
* @throws IOException If thrown, transaction failed. Call {@link #rollback(Server, RegionServerServices)}
*/
- /* package */void transitionZKNode(final Server server, HRegion a, HRegion b)
+ /* package */void transitionZKNode(final Server server,
+ final RegionServerServices services, HRegion a, HRegion b)
throws IOException {
// Tell master about split by updating zk. If we fail, abort.
if (server != null && server.getZooKeeper() != null) {
@@ -420,7 +416,8 @@ public class SplitTransaction {
parent.getRegionInfo(), a.getRegionInfo(), b.getRegionInfo(),
server.getServerName(), this.znodeVersion);
spins++;
- } while (this.znodeVersion != -1);
+ } while (this.znodeVersion != -1 && !server.isStopped()
+ && !services.isStopping());
} catch (Exception e) {
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
@@ -454,7 +451,7 @@ public class SplitTransaction {
throws IOException {
PairOfSameType<HRegion> regions = createDaughters(server, services);
openDaughters(server, services, regions.getFirst(), regions.getSecond());
- transitionZKNode(server, regions.getFirst(), regions.getSecond());
+ transitionZKNode(server, services, regions.getFirst(), regions.getSecond());
return regions;
}
Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java?rev=1358821&r1=1358820&r2=1358821&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java Sun Jul 8 19:21:53 2012
@@ -132,7 +132,8 @@ public class TestEndToEndSplitTransactio
assertTrue(test(con, tableName, lastRow, server));
// 4. phase III
- split.transitionZKNode(server, regions.getFirst(), regions.getSecond());
+ split.transitionZKNode(server, server, regions.getFirst(),
+ regions.getSecond());
assertTrue(test(con, tableName, firstRow, server));
assertTrue(test(con, tableName, lastRow, server));
}