Author: stack
Date: Thu Apr 28 19:51:25 2011
New Revision: 1097587
URL: http://svn.apache.org/viewvc?rev=1097587&view=rev
Log:
HBASE-3827 hbase-1502, removing heartbeats, broke master joining a running
cluster and was returning master hostname for rs to use
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ServerName.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.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/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java
Modified: hbase/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1097587&r1=1097586&r2=1097587&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Apr 28 19:51:25 2011
@@ -89,6 +89,8 @@ Release 0.91.0 - Unreleased
HBASE-3819 TestSplitLogWorker has too many SLWs running -- makes for
contention and occasional failures
HBASE-3210 HBASE-1921 for the new master
+ HBASE-3827 hbase-1502, removing heartbeats, broke master joining a running
+ cluster and was returning master hostname for rs to use
IMPROVEMENTS
HBASE-3290 Max Compaction Size (Nicolas Spiegelberg via Stack)
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/ServerName.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/ServerName.java?rev=1097587&r1=1097586&r2=1097587&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/ServerName.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/ServerName.java Thu Apr
28 19:51:25 2011
@@ -211,11 +211,21 @@ public class ServerName implements Compa
public static ServerName findServerWithSameHostnamePort(final
Collection<ServerName> names,
final ServerName serverName) {
for (ServerName sn: names) {
- if (sn.getHostname().equals(serverName.getHostname()) &&
- sn.getPort() == serverName.getPort()) {
- return sn;
- }
+ if (isSameHostnameAndPort(serverName, sn)) return sn;
}
return null;
}
+
+ /**
+ * @param left
+ * @param rigth
+ * @return True if <code>other</code> has same hostname and port.
+ */
+ public static boolean isSameHostnameAndPort(final ServerName left,
+ final ServerName right) {
+ if (left == null) return false;
+ if (right == null) return false;
+ return left.getHostname().equals(right.getHostname()) &&
+ left.getPort() == right.getPort();
+ }
}
\ No newline at end of file
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java?rev=1097587&r1=1097586&r2=1097587&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java
Thu Apr 28 19:51:25 2011
@@ -142,7 +142,7 @@ class ActiveMasterManager extends ZooKee
byte [] bytes =
ZKUtil.getDataAndWatch(this.watcher, this.watcher.masterAddressZNode);
ServerName currentMaster = new ServerName(Bytes.toString(bytes));
- if (currentMaster != null && currentMaster.equals(this.sn)) {
+ if (ServerName.isSameHostnameAndPort(currentMaster, this.sn)) {
LOG.info("Current master has this master's address, " + currentMaster +
"; master was restarted? Waiting on znode to expire...");
// Hurry along the expiration of the znode.
@@ -194,4 +194,4 @@ class ActiveMasterManager extends ZooKee
LOG.error(this.watcher.prefix("Error deleting our own master address
node"), e);
}
}
-}
\ No newline at end of file
+}
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1097587&r1=1097586&r2=1097587&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Thu
Apr 28 19:51:25 2011
@@ -22,6 +22,7 @@ package org.apache.hadoop.hbase.master;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
@@ -636,12 +637,13 @@ implements HMasterInterface, HMasterRegi
final long serverStartCode, final long serverCurrentTime)
throws IOException {
// Register with server manager
- this.serverManager.regionServerStartup(HBaseServer.getRemoteIp(), port,
+ InetAddress ia = HBaseServer.getRemoteIp();
+ ServerName rs = this.serverManager.regionServerStartup(ia, port,
serverStartCode, serverCurrentTime);
// Send back some config info
MapWritable mw = createConfigurationSubset();
mw.put(new Text(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER),
- new Text(this.serverName.getHostname()));
+ new Text(rs.getHostname()));
return mw;
}
@@ -660,7 +662,7 @@ implements HMasterInterface, HMasterRegi
}
@Override
- public void regionServerReport(byte[] sn, HServerLoad hsl)
+ public void regionServerReport(final byte [] sn, final HServerLoad hsl)
throws IOException {
this.serverManager.regionServerReport(new ServerName(sn), hsl);
if (hsl != null && this.metrics != null) {
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=1097587&r1=1097586&r2=1097587&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
Thu Apr 28 19:51:25 2011
@@ -104,9 +104,10 @@ public class ServerManager {
* @param port The remote port
* @param serverStartcode
* @param serverCurrentTime The current time of the region server in ms
+ * @return The ServerName we know this server as.
* @throws IOException
*/
- void regionServerStartup(final InetAddress ia, final int port,
+ ServerName regionServerStartup(final InetAddress ia, final int port,
final long serverStartcode, long serverCurrentTime)
throws IOException {
// Test for case where we get a region startup message from a regionserver
@@ -121,6 +122,7 @@ public class ServerManager {
checkIsDead(sn, "STARTUP");
checkAlreadySameHostPort(sn);
recordNewServer(sn, HServerLoad.EMPTY_HSERVERLOAD);
+ return sn;
}
void regionServerReport(ServerName sn, HServerLoad hsl)
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=1097587&r1=1097586&r2=1097587&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
Thu Apr 28 19:51:25 2011
@@ -44,8 +44,6 @@ import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -69,7 +67,6 @@ import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterAddressTracker;
import org.apache.hadoop.hbase.NotServingRegionException;
import org.apache.hadoop.hbase.RemoteExceptionHandler;
-import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.Stoppable;
import org.apache.hadoop.hbase.UnknownRowLockException;
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java?rev=1097587&r1=1097586&r2=1097587&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/RootRegionTracker.java
Thu Apr 28 19:51:25 2011
@@ -22,6 +22,7 @@ package org.apache.hadoop.hbase.zookeepe
import org.apache.hadoop.hbase.Abortable;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.catalog.RootLocationEditor;
+import org.apache.hadoop.hbase.util.Addressing;
import org.apache.hadoop.hbase.util.Bytes;
/**
@@ -57,8 +58,7 @@ public class RootRegionTracker extends Z
* @throws InterruptedException
*/
public ServerName getRootRegionLocation() throws InterruptedException {
- byte [] data = super.getData();
- return data == null? null: new ServerName(dataToString(data));
+ return dataToServerName(super.getData());
}
/**
@@ -71,16 +71,28 @@ public class RootRegionTracker extends Z
*/
public ServerName waitRootRegionLocation(long timeout)
throws InterruptedException {
- String str = dataToString(super.blockUntilAvailable(timeout));
- return str == null? null: new ServerName(str);
+ return dataToServerName(super.blockUntilAvailable(timeout));
}
/*
* @param data
* @return Returns null if <code>data</code> is null else converts passed
data
- * to a String instance.
+ * to a ServerName instance.
*/
- private static String dataToString(final byte [] data) {
- return data == null ? null: Bytes.toString(data);
+ private static ServerName dataToServerName(final byte [] data) {
+ // The str returned could be old style -- pre hbase-1502 -- which was
+ // hostname and port seperated by a colon rather than hostname, port and
+ // startcode delimited by a ','.
+ if (data == null || data.length <= 0) return null;
+ String str = Bytes.toString(data);
+ int index = str.indexOf(ServerName.SERVERNAME_SEPARATOR);
+ if (index != -1) {
+ // Presume its ServerName.toString() format.
+ return new ServerName(str);
+ }
+ // Presume it a hostname:port format.
+ String hostname = Addressing.parseHostname(str);
+ int port = Addressing.parsePort(str);
+ return new ServerName(hostname, port, -1L);
}
}
\ No newline at end of file