HBASE-10200 Better error message when HttpServer fails to start due to java.net.BindException(Kiran Kumar M R)
This commit is contained in:
parent
13122f5076
commit
6dea02b260
|
@ -102,4 +102,25 @@ public class Addressing {
|
||||||
|
|
||||||
throw new SocketException("Can't get our ip address, interfaces are: " + interfaces);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,7 @@ import org.apache.hadoop.hbase.regionserver.RSRpcServices;
|
||||||
import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;
|
import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;
|
||||||
import org.apache.hadoop.hbase.replication.regionserver.Replication;
|
import org.apache.hadoop.hbase.replication.regionserver.Replication;
|
||||||
import org.apache.hadoop.hbase.security.UserProvider;
|
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.Bytes;
|
||||||
import org.apache.hadoop.hbase.util.CompressionTest;
|
import org.apache.hadoop.hbase.util.CompressionTest;
|
||||||
import org.apache.hadoop.hbase.util.FSUtils;
|
import org.apache.hadoop.hbase.util.FSUtils;
|
||||||
|
@ -321,11 +322,20 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
|
||||||
if (infoPort < 0 || infoServer == null) {
|
if (infoPort < 0 || infoServer == null) {
|
||||||
return;
|
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();
|
RedirectServlet.regionServerInfoPort = infoServer.getPort();
|
||||||
masterJettyServer = new org.mortbay.jetty.Server();
|
masterJettyServer = new org.mortbay.jetty.Server();
|
||||||
Connector connector = new SelectChannelConnector();
|
Connector connector = new SelectChannelConnector();
|
||||||
connector.setHost(conf.get("hbase.master.info.bindAddress", "0.0.0.0"));
|
connector.setHost(addr);
|
||||||
connector.setPort(infoPort);
|
connector.setPort(infoPort);
|
||||||
masterJettyServer.addConnector(connector);
|
masterJettyServer.addConnector(connector);
|
||||||
masterJettyServer.setStopAtShutdown(true);
|
masterJettyServer.setStopAtShutdown(true);
|
||||||
|
|
|
@ -45,6 +45,7 @@ import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.concurrent.ConcurrentSkipListMap;
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
import javax.management.ObjectName;
|
import javax.management.ObjectName;
|
||||||
import javax.servlet.http.HttpServlet;
|
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.regionserver.wal.WALActionsListener;
|
||||||
import org.apache.hadoop.hbase.security.UserProvider;
|
import org.apache.hadoop.hbase.security.UserProvider;
|
||||||
import org.apache.hadoop.hbase.trace.SpanReceiverHost;
|
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.ByteStringer;
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
import org.apache.hadoop.hbase.util.CompressionTest;
|
import org.apache.hadoop.hbase.util.CompressionTest;
|
||||||
|
@ -1662,6 +1664,14 @@ public class HRegionServer extends HasThread implements
|
||||||
// -1 is for disabling info server
|
// -1 is for disabling info server
|
||||||
if (port < 0) return port;
|
if (port < 0) return port;
|
||||||
String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");
|
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
|
// check if auto port bind enabled
|
||||||
boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,
|
boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO,
|
||||||
false);
|
false);
|
||||||
|
|
Loading…
Reference in New Issue