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/03/01 21:52:46 UTC
svn commit: r1076019 - in /hbase/trunk: ./
src/main/java/org/apache/hadoop/hbase/
src/main/java/org/apache/hadoop/hbase/master/
src/main/java/org/apache/hadoop/hbase/regionserver/
src/test/java/org/apache/hadoop/hbase/
Author: stack
Date: Tue Mar 1 20:52:45 2011
New Revision: 1076019
URL: http://svn.apache.org/viewvc?rev=1076019&view=rev
Log:
HBASE-3573 Move shutdown messaging OFF hearbeat; prereq for fix of hbase-1502
Removed:
hbase/trunk/src/test/java/org/apache/hadoop/hbase/TestHMsg.java
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/HMsg.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hbase/trunk/src/test/java/org/apache/hadoop/hbase/TestSerialization.java
Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Tue Mar 1 20:52:45 2011
@@ -90,6 +90,8 @@ Release 0.91.0 - Unreleased
TASK
HBASE-3559 Move report of split to master OFF the heartbeat channel
+ HBASE-3573 Move shutdown messaging OFF hearbeat; prereq for fix of
+ hbase-1502
NEW FEATURES
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/HMsg.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/HMsg.java?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/HMsg.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/HMsg.java Tue Mar 1 20:52:45 2011
@@ -38,15 +38,9 @@ import org.apache.hadoop.io.Writable;
* design, these are to go via zk from here on out.
*/
public class HMsg implements Writable {
- public static final HMsg [] STOP_REGIONSERVER_ARRAY =
- new HMsg [] {new HMsg(Type.STOP_REGIONSERVER)};
public static final HMsg [] EMPTY_HMSG_ARRAY = new HMsg[0];
public static enum Type {
- /** Master tells region server to stop.
- */
- STOP_REGIONSERVER,
-
/**
* When RegionServer receives this message, it goes into a sleep that only
* an exit will cure. This message is sent by unit tests simulating
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java Tue Mar 1 20:52:45 2011
@@ -504,7 +504,9 @@ public class HRegionInfo extends Version
return this.tableDesc.isRootRegion();
}
- /** @return true if this is the meta table */
+ /** @return true if this region is from a table that is a meta table,
+ * either <code>.META.</code> or <code>-ROOT-</code>
+ */
public boolean isMetaTable() {
return this.tableDesc.isMetaTable();
}
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java Tue Mar 1 20:52:45 2011
@@ -249,7 +249,9 @@ public class HTableDescriptor implements
values.put(IS_META_KEY, isMeta? TRUE: FALSE);
}
- /** @return true if table is the meta table */
+ /** @return true if table is a meta table, either <code>.META.</code> or
+ * <code>-ROOT-</code>
+ */
public boolean isMetaTable() {
return isMetaRegion() && !isRootRegion();
}
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=1076019&r1=1076018&r2=1076019&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 Tue Mar 1 20:52:45 2011
@@ -1964,6 +1964,40 @@ public class AssignmentManager extends Z
}
/**
+ * @param hsi
+ * @return True if this server is carrying a catalog region, a region from
+ * -ROOT- or .META. table.
+ */
+ boolean isMetaRegionServer(final HServerInfo hsi) {
+ synchronized (this.regions) {
+ List<HRegionInfo> regions = this.servers.get(hsi);
+ if (regions == null || regions.isEmpty()) return false;
+ for (HRegionInfo hri: regions) {
+ if (hri.isMetaRegion()) return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Run through remaining regionservers and unassign all catalog regions.
+ */
+ void unassignCatalogRegions() {
+ this.servers.entrySet();
+ synchronized (this.regions) {
+ for (Map.Entry<HServerInfo, List<HRegionInfo>> e: this.servers.entrySet()) {
+ List<HRegionInfo> regions = e.getValue();
+ if (regions == null || regions.isEmpty()) continue;
+ for (HRegionInfo hri: regions) {
+ if (hri.isMetaRegion()) {
+ unassign(hri);
+ }
+ }
+ }
+ }
+ }
+
+ /**
* State of a Region while undergoing transitions.
*/
public static class RegionState implements Writable {
@@ -2079,4 +2113,4 @@ public class AssignmentManager extends Z
public void stop() {
this.timeoutMonitor.interrupt();
}
-}
+}
\ No newline at end of file
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java Tue Mar 1 20:52:45 2011
@@ -269,11 +269,6 @@ public class ServerManager {
"ready next on next report");
}
- // Check startcodes
- if (raceThatShouldNotHappenAnymore(storedInfo, info)) {
- return HMsg.STOP_REGIONSERVER_ARRAY;
- }
-
for (HMsg msg: msgs) {
LOG.info("Received " + msg + " from " + serverInfo.getServerName());
switch (msg.getType()) {
@@ -283,38 +278,32 @@ public class ServerManager {
}
HMsg [] reply = null;
- int numservers = countOfRegionServers();
if (this.clusterShutdown) {
- if (numservers <= 2) {
+ if (isOnlyMetaRegionServersOnline()) {
+ LOG.info("Only catalog regions remaining; running unassign");
+ // The only remaining regions are catalog regions.
// Shutdown needs to be staggered; the meta regions need to close last
- // in case they need to be updated during the close melee. If <= 2
- // servers left, then these are the two that were carrying root and meta
- // most likely (TODO: This presumes unsplittable meta -- FIX). Tell
- // these servers can shutdown now too.
- reply = HMsg.STOP_REGIONSERVER_ARRAY;
+ // in case they need to be updated during the close melee. If only
+ // catalog reigons remaining, tell them they can go down now too. On
+ // close of region, the regionservers should then shut themselves down.
+ this.services.getAssignmentManager().unassignCatalogRegions();
}
}
return processRegionServerAllsWell(info, mostLoadedRegions, reply);
}
- private boolean raceThatShouldNotHappenAnymore(final HServerInfo storedInfo,
- final HServerInfo reportedInfo) {
- if (storedInfo.getStartCode() != reportedInfo.getStartCode()) {
- // TODO: I don't think this possible any more. We check startcodes when
- // server comes in on regionServerStartup -- St.Ack
- // This state is reachable if:
- // 1) RegionServer A started
- // 2) RegionServer B started on the same machine, then clobbered A in regionServerStartup.
- // 3) RegionServer A returns, expecting to work as usual.
- // The answer is to ask A to shut down for good.
- LOG.warn("Race condition detected: " + reportedInfo.getServerName());
- synchronized (this.onlineServers) {
- removeServerInfo(reportedInfo.getServerName());
- notifyOnlineServers();
+ /**
+ * @return True if all online servers are carrying one or more catalog
+ * regions, there are no servers online carrying user regions only
+ */
+ private boolean isOnlyMetaRegionServersOnline() {
+ List<HServerInfo> onlineServers = getOnlineServersList();
+ for (HServerInfo hsi: onlineServers) {
+ if (!this.services.getAssignmentManager().isMetaRegionServer(hsi)) {
+ return false;
}
- return true;
}
- return false;
+ return true;
}
/**
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Tue Mar 1 20:52:45 2011
@@ -741,16 +741,6 @@ public class HRegionServer implements HR
}
updateOutboundMsgs(outboundMessages);
outboundMessages.clear();
-
- for (int i = 0; !this.stopped && msgs != null && i < msgs.length; i++) {
- LOG.info(msgs[i].toString());
- // Intercept stop regionserver messages
- if (msgs[i].getType().equals(HMsg.Type.STOP_REGIONSERVER)) {
- stop("Received " + msgs[i]);
- continue;
- }
- LOG.warn("NOT PROCESSING " + msgs[i] + " -- WHY IS MASTER SENDING IT TO US?");
- }
return outboundMessages;
}
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/TestSerialization.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/TestSerialization.java?rev=1076019&r1=1076018&r2=1076019&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/TestSerialization.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/TestSerialization.java Tue Mar 1 20:52:45 2011
@@ -84,21 +84,6 @@ public class TestSerialization {
assertTrue(Bytes.equals("value".getBytes(), hmw.get("key".getBytes())));
}
- @Test public void testHMsg() throws Exception {
- final String name = "testHMsg";
- HMsg m = new HMsg(HMsg.Type.STOP_REGIONSERVER);
- byte [] mb = Writables.getBytes(m);
- HMsg deserializedHMsg = (HMsg)Writables.getWritable(mb, new HMsg());
- assertTrue(m.equals(deserializedHMsg));
- m = new HMsg(HMsg.Type.STOP_REGIONSERVER,
- new HRegionInfo(new HTableDescriptor(name),
- HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY),
- "Some message".getBytes());
- mb = Writables.getBytes(m);
- deserializedHMsg = (HMsg)Writables.getWritable(mb, new HMsg());
- assertTrue(m.equals(deserializedHMsg));
- }
-
@Test public void testTableDescriptor() throws Exception {
final String name = "testTableDescriptor";
HTableDescriptor htd = createTableDescriptor(name);