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:
Eli Collins 2012-05-31 21:02:08 +00:00
parent c0dcdd67d1
commit 675a7e4acb
6 changed files with 34 additions and 12 deletions

View File

@ -270,6 +270,9 @@ Release 2.0.1-alpha - UNRELEASED
HDFS-3460. HttpFS proxyuser validation with Kerberos ON uses full HDFS-3460. HttpFS proxyuser validation with Kerberos ON uses full
principal name. (tucu) 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 Release 2.0.0-alpha - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -706,9 +706,10 @@ public static String getNameServiceIdFromAddress(final Configuration conf,
* @param httpsAddress -If true, and if security is enabled, returns server * @param httpsAddress -If true, and if security is enabled, returns server
* https address. If false, returns server http address. * https address. If false, returns server http address.
* @return server http or https address * @return server http or https address
* @throws IOException
*/ */
public static String getInfoServer( public static String getInfoServer(InetSocketAddress namenodeAddr,
InetSocketAddress namenodeAddr, Configuration conf, boolean httpsAddress) { Configuration conf, boolean httpsAddress) throws IOException {
boolean securityOn = UserGroupInformation.isSecurityEnabled(); boolean securityOn = UserGroupInformation.isSecurityEnabled();
String httpAddressKey = (securityOn && httpsAddress) ? String httpAddressKey = (securityOn && httpsAddress) ?
DFS_NAMENODE_HTTPS_ADDRESS_KEY : DFS_NAMENODE_HTTP_ADDRESS_KEY; DFS_NAMENODE_HTTPS_ADDRESS_KEY : DFS_NAMENODE_HTTP_ADDRESS_KEY;
@ -725,8 +726,14 @@ public static String getInfoServer(
} else { } else {
suffixes = new String[2]; suffixes = new String[2];
} }
String configuredInfoAddr = getSuffixedConf(conf, httpAddressKey,
return getSuffixedConf(conf, httpAddressKey, httpAddressDefault, suffixes); httpAddressDefault, suffixes);
if (namenodeAddr != null) {
return substituteForWildcardAddress(configuredInfoAddr,
namenodeAddr.getHostName());
} else {
return configuredInfoAddr;
}
} }

View File

@ -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"); LOG.info("Starting services required for standby state");
if (!dir.fsImage.editLog.isOpenForRead()) { if (!dir.fsImage.editLog.isOpenForRead()) {
// During startup, we're already open for read. // During startup, we're already open for read.

View File

@ -67,7 +67,8 @@ public class StandbyCheckpointer {
// This is for use in tests. // This is for use in tests.
private static int canceledCount = 0; private static int canceledCount = 0;
public StandbyCheckpointer(Configuration conf, FSNamesystem ns) { public StandbyCheckpointer(Configuration conf, FSNamesystem ns)
throws IOException {
this.namesystem = ns; this.namesystem = ns;
this.checkpointConf = new CheckpointConf(conf); this.checkpointConf = new CheckpointConf(conf);
this.thread = new CheckpointerThread(); this.thread = new CheckpointerThread();
@ -78,8 +79,9 @@ public StandbyCheckpointer(Configuration conf, FSNamesystem ns) {
/** /**
* Determine the address of the NN we are checkpointing * Determine the address of the NN we are checkpointing
* as well as our own HTTP address from the configuration. * 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. // Look up our own address.
String myAddrString = getHttpAddress(conf); String myAddrString = getHttpAddress(conf);
@ -95,7 +97,7 @@ private void setNameNodeAddresses(Configuration conf) {
myNNAddress = NetUtils.createSocketAddr(myAddrString); myNNAddress = NetUtils.createSocketAddr(myAddrString);
} }
private String getHttpAddress(Configuration conf) { private String getHttpAddress(Configuration conf) throws IOException {
String configuredAddr = DFSUtil.getInfoServer(null, conf, false); String configuredAddr = DFSUtil.getInfoServer(null, conf, false);
// Use the hostname from the RPC address as a default, in case // Use the hostname from the RPC address as a default, in case

View File

@ -409,14 +409,20 @@ public void testEmptyConf() {
} }
@Test @Test
public void testGetServerInfo() { public void testGetInfoServer() throws IOException {
HdfsConfiguration conf = new HdfsConfiguration(); HdfsConfiguration conf = new HdfsConfiguration();
conf.set(HADOOP_SECURITY_AUTHENTICATION, "kerberos"); conf.set(HADOOP_SECURITY_AUTHENTICATION, "kerberos");
UserGroupInformation.setConfiguration(conf); UserGroupInformation.setConfiguration(conf);
String httpsport = DFSUtil.getInfoServer(null, conf, true); String httpsport = DFSUtil.getInfoServer(null, conf, true);
assertEquals("0.0.0.0:"+DFS_NAMENODE_HTTPS_PORT_DEFAULT, httpsport); assertEquals("0.0.0.0:"+DFS_NAMENODE_HTTPS_PORT_DEFAULT, httpsport);
String httpport = DFSUtil.getInfoServer(null, conf, false); String httpport = DFSUtil.getInfoServer(null, conf, false);
assertEquals("0.0.0.0:"+DFS_NAMENODE_HTTP_PORT_DEFAULT, httpport); 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 @Test

View File

@ -72,7 +72,7 @@ private Configuration getHAConf(String nsId, String host1, String host2) {
} }
@Test @Test
public void testGetOtherNNHttpAddress() { public void testGetOtherNNHttpAddress() throws IOException {
// Use non-local addresses to avoid host address matching // Use non-local addresses to avoid host address matching
Configuration conf = getHAConf("ns1", "1.2.3.1", "1.2.3.2"); Configuration conf = getHAConf("ns1", "1.2.3.1", "1.2.3.2");
conf.set(DFSConfigKeys.DFS_NAMESERVICE_ID, "ns1"); conf.set(DFSConfigKeys.DFS_NAMESERVICE_ID, "ns1");