You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2014/10/14 04:24:49 UTC
git commit: HBASE-10200 Better error message when HttpServer fails to
start due to java.net.BindException(Kiran Kumar M R)
Repository: hbase
Updated Branches:
refs/heads/master 13122f507 -> 6dea02b26
HBASE-10200 Better error message when HttpServer fails to start due to java.net.BindException(Kiran Kumar M R)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/6dea02b2
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/6dea02b2
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/6dea02b2
Branch: refs/heads/master
Commit: 6dea02b2605d398e0ab499b9813c4718a9608912
Parents: 13122f5
Author: Rajeshbabu Chintaguntla <ra...@apache.org>
Authored: Tue Oct 14 02:24:21 2014 +0000
Committer: Rajeshbabu Chintaguntla <ra...@apache.org>
Committed: Tue Oct 14 02:24:21 2014 +0000
----------------------------------------------------------------------
.../apache/hadoop/hbase/util/Addressing.java | 21 ++++++++++++++++++++
.../org/apache/hadoop/hbase/master/HMaster.java | 12 ++++++++++-
.../hbase/regionserver/HRegionServer.java | 10 ++++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/6dea02b2/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java
index 8fb554f..a7c929f 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java
@@ -102,4 +102,25 @@ public class Addressing {
throw new SocketException("Can't get our ip address, interfaces are: " + interfaces);
}
+
+ /**
+ * Given an InetAddress, checks to see if the address is a local address, by comparing the address
+ * with all the interfaces on the node.
+ * @param addr address to check if it is local node's address
+ * @return true if the address corresponds to the local node
+ */
+ public static boolean isLocalAddress(InetAddress addr) {
+ // Check if the address is any local or loop back
+ boolean local = addr.isAnyLocalAddress() || addr.isLoopbackAddress();
+
+ // Check if the address is defined on any interface
+ if (!local) {
+ try {
+ local = NetworkInterface.getByInetAddress(addr) != null;
+ } catch (SocketException e) {
+ local = false;
+ }
+ }
+ return local;
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/6dea02b2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 61d1b7a..831c4da 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -109,6 +109,7 @@ import org.apache.hadoop.hbase.regionserver.RSRpcServices;
import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;
import org.apache.hadoop.hbase.replication.regionserver.Replication;
import org.apache.hadoop.hbase.security.UserProvider;
+import org.apache.hadoop.hbase.util.Addressing;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.CompressionTest;
import org.apache.hadoop.hbase.util.FSUtils;
@@ -321,11 +322,20 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
if (infoPort < 0 || infoServer == null) {
return;
}
+ String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");
+ if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {
+ String msg =
+ "Failed to start redirecting jetty server. Address " + addr
+ + " does not belong to this host. Correct configuration parameter: "
+ + "hbase.master.info.bindAddress";
+ LOG.error(msg);
+ throw new IOException(msg);
+ }
RedirectServlet.regionServerInfoPort = infoServer.getPort();
masterJettyServer = new org.mortbay.jetty.Server();
Connector connector = new SelectChannelConnector();
- connector.setHost(conf.get("hbase.master.info.bindAddress", "0.0.0.0"));
+ connector.setHost(addr);
connector.setPort(infoPort);
masterJettyServer.addConnector(connector);
masterJettyServer.setStopAtShutdown(true);
http://git-wip-us.apache.org/repos/asf/hbase/blob/6dea02b2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 21de028..008e443 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -45,6 +45,7 @@ import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.net.InetAddress;
import javax.management.ObjectName;
import javax.servlet.http.HttpServlet;
@@ -127,6 +128,7 @@ import org.apache.hadoop.hbase.regionserver.wal.HLogUtil;
import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;
import org.apache.hadoop.hbase.security.UserProvider;
import org.apache.hadoop.hbase.trace.SpanReceiverHost;
+import org.apache.hadoop.hbase.util.Addressing;
import org.apache.hadoop.hbase.util.ByteStringer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.CompressionTest;
@@ -1662,6 +1664,14 @@ public class HRegionServer extends HasThread implements
// -1 is for disabling info server
if (port < 0) return port;
String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");
+ if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {
+ String msg =
+ "Failed to start http info server. Address " + addr
+ + " does not belong to this host. Correct configuration parameter: "
+ + "hbase.regionserver.info.bindAddress";
+ LOG.error(msg);
+ throw new IOException(msg);
+ }
// check if auto port bind enabled
boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,
false);