HDFS-3484. hdfs fsck doesn't work if NN HTTP address is set to 0.0.0.0 even if NN RPC address is configured. Contributed by Aaron T. Myers
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1344908 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c0dcdd67d1
commit
675a7e4acb
@ -270,6 +270,9 @@ Release 2.0.1-alpha - UNRELEASED
|
||||
HDFS-3460. HttpFS proxyuser validation with Kerberos ON uses full
|
||||
principal name. (tucu)
|
||||
|
||||
HDFS-3484. hdfs fsck doesn't work if NN HTTP address is set to
|
||||
0.0.0.0 even if NN RPC address is configured. (atm via eli)
|
||||
|
||||
Release 2.0.0-alpha - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -706,9 +706,10 @@ public static String getNameServiceIdFromAddress(final Configuration conf,
|
||||
* @param httpsAddress -If true, and if security is enabled, returns server
|
||||
* https address. If false, returns server http address.
|
||||
* @return server http or https address
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String getInfoServer(
|
||||
InetSocketAddress namenodeAddr, Configuration conf, boolean httpsAddress) {
|
||||
public static String getInfoServer(InetSocketAddress namenodeAddr,
|
||||
Configuration conf, boolean httpsAddress) throws IOException {
|
||||
boolean securityOn = UserGroupInformation.isSecurityEnabled();
|
||||
String httpAddressKey = (securityOn && httpsAddress) ?
|
||||
DFS_NAMENODE_HTTPS_ADDRESS_KEY : DFS_NAMENODE_HTTP_ADDRESS_KEY;
|
||||
@ -725,8 +726,14 @@ public static String getInfoServer(
|
||||
} else {
|
||||
suffixes = new String[2];
|
||||
}
|
||||
|
||||
return getSuffixedConf(conf, httpAddressKey, httpAddressDefault, suffixes);
|
||||
String configuredInfoAddr = getSuffixedConf(conf, httpAddressKey,
|
||||
httpAddressDefault, suffixes);
|
||||
if (namenodeAddr != null) {
|
||||
return substituteForWildcardAddress(configuredInfoAddr,
|
||||
namenodeAddr.getHostName());
|
||||
} else {
|
||||
return configuredInfoAddr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -751,7 +758,7 @@ public static String substituteForWildcardAddress(String configuredAddress,
|
||||
if (UserGroupInformation.isSecurityEnabled() &&
|
||||
defaultSockAddr.getAddress().isAnyLocalAddress()) {
|
||||
throw new IOException("Cannot use a wildcard address with security. " +
|
||||
"Must explicitly set bind address for Kerberos");
|
||||
"Must explicitly set bind address for Kerberos");
|
||||
}
|
||||
return defaultHost + ":" + sockAddr.getPort();
|
||||
} else {
|
||||
|
@ -679,8 +679,12 @@ void stopActiveServices() {
|
||||
}
|
||||
}
|
||||
|
||||
/** Start services required in standby state */
|
||||
void startStandbyServices(final Configuration conf) {
|
||||
/**
|
||||
* Start services required in standby state
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
void startStandbyServices(final Configuration conf) throws IOException {
|
||||
LOG.info("Starting services required for standby state");
|
||||
if (!dir.fsImage.editLog.isOpenForRead()) {
|
||||
// During startup, we're already open for read.
|
||||
|
@ -67,7 +67,8 @@ public class StandbyCheckpointer {
|
||||
// This is for use in tests.
|
||||
private static int canceledCount = 0;
|
||||
|
||||
public StandbyCheckpointer(Configuration conf, FSNamesystem ns) {
|
||||
public StandbyCheckpointer(Configuration conf, FSNamesystem ns)
|
||||
throws IOException {
|
||||
this.namesystem = ns;
|
||||
this.checkpointConf = new CheckpointConf(conf);
|
||||
this.thread = new CheckpointerThread();
|
||||
@ -78,8 +79,9 @@ public StandbyCheckpointer(Configuration conf, FSNamesystem ns) {
|
||||
/**
|
||||
* Determine the address of the NN we are checkpointing
|
||||
* as well as our own HTTP address from the configuration.
|
||||
* @throws IOException
|
||||
*/
|
||||
private void setNameNodeAddresses(Configuration conf) {
|
||||
private void setNameNodeAddresses(Configuration conf) throws IOException {
|
||||
// Look up our own address.
|
||||
String myAddrString = getHttpAddress(conf);
|
||||
|
||||
@ -95,7 +97,7 @@ private void setNameNodeAddresses(Configuration conf) {
|
||||
myNNAddress = NetUtils.createSocketAddr(myAddrString);
|
||||
}
|
||||
|
||||
private String getHttpAddress(Configuration conf) {
|
||||
private String getHttpAddress(Configuration conf) throws IOException {
|
||||
String configuredAddr = DFSUtil.getInfoServer(null, conf, false);
|
||||
|
||||
// Use the hostname from the RPC address as a default, in case
|
||||
|
@ -409,14 +409,20 @@ public void testEmptyConf() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetServerInfo() {
|
||||
public void testGetInfoServer() throws IOException {
|
||||
HdfsConfiguration conf = new HdfsConfiguration();
|
||||
conf.set(HADOOP_SECURITY_AUTHENTICATION, "kerberos");
|
||||
UserGroupInformation.setConfiguration(conf);
|
||||
|
||||
String httpsport = DFSUtil.getInfoServer(null, conf, true);
|
||||
assertEquals("0.0.0.0:"+DFS_NAMENODE_HTTPS_PORT_DEFAULT, httpsport);
|
||||
|
||||
String httpport = DFSUtil.getInfoServer(null, conf, false);
|
||||
assertEquals("0.0.0.0:"+DFS_NAMENODE_HTTP_PORT_DEFAULT, httpport);
|
||||
|
||||
String httpAddress = DFSUtil.getInfoServer(new InetSocketAddress(
|
||||
"localhost", 8020), conf, false);
|
||||
assertEquals("localhost:" + DFS_NAMENODE_HTTP_PORT_DEFAULT, httpAddress);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -72,7 +72,7 @@ private Configuration getHAConf(String nsId, String host1, String host2) {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOtherNNHttpAddress() {
|
||||
public void testGetOtherNNHttpAddress() throws IOException {
|
||||
// Use non-local addresses to avoid host address matching
|
||||
Configuration conf = getHAConf("ns1", "1.2.3.1", "1.2.3.2");
|
||||
conf.set(DFSConfigKeys.DFS_NAMESERVICE_ID, "ns1");
|
||||
|
Loading…
Reference in New Issue
Block a user