Skip to content

Commit 865c328

Browse files
author
Inigo Goiri
committed
HDFS-14460. DFSUtil#getNamenodeWebAddr should return HTTPS address based on policy configured. Contributed by CR Hota.
1 parent 6a42745 commit 865c328

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSUtil.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,11 +1329,15 @@ public static String getNamenodeWebAddr(final Configuration conf, String nsId,
13291329
nsId = getOnlyNameServiceIdOrNull(conf);
13301330
}
13311331

1332+
String webAddrBaseKey = DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY;
1333+
String webAddrDefault = DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_DEFAULT;
1334+
if (getHttpPolicy(conf) == HttpConfig.Policy.HTTPS_ONLY) {
1335+
webAddrBaseKey = DFSConfigKeys.DFS_NAMENODE_HTTPS_ADDRESS_KEY;
1336+
webAddrDefault = DFSConfigKeys.DFS_NAMENODE_HTTPS_ADDRESS_DEFAULT;
1337+
}
13321338
String webAddrKey = DFSUtilClient.concatSuffixes(
1333-
DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY, nsId, nnId);
1334-
1335-
String webAddr =
1336-
conf.get(webAddrKey, DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_DEFAULT);
1339+
webAddrBaseKey, nsId, nnId);
1340+
String webAddr = conf.get(webAddrKey, webAddrDefault);
13371341
return webAddr;
13381342
}
13391343

hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSUtil.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_HA_NAMENODES_KEY_PREFIX;
2323
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_INTERNAL_NAMESERVICES_KEY;
2424
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_BACKUP_ADDRESS_KEY;
25+
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_HTTP_POLICY_KEY;
26+
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_HTTPS_ADDRESS_KEY;
2527
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_HTTPS_PORT_DEFAULT;
2628
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY;
2729
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_HTTP_PORT_DEFAULT;
@@ -70,6 +72,7 @@
7072
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
7173
import org.apache.hadoop.hdfs.server.namenode.NameNode;
7274
import org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider;
75+
import org.apache.hadoop.http.HttpConfig;
7376
import org.apache.hadoop.net.NetUtils;
7477
import org.apache.hadoop.security.UserGroupInformation;
7578
import org.apache.hadoop.security.alias.CredentialProvider;
@@ -87,6 +90,8 @@ public class TestDFSUtil {
8790
static final String NS1_NN_ADDR = "ns1-nn.example.com:8020";
8891
static final String NS1_NN1_ADDR = "ns1-nn1.example.com:8020";
8992
static final String NS1_NN2_ADDR = "ns1-nn2.example.com:8020";
93+
static final String NS1_NN1_HTTPS_ADDR = "ns1-nn1.example.com:50740";
94+
static final String NS1_NN1_HTTP_ADDR = "ns1-nn1.example.com:50070";
9095

9196
/**
9297
* Reset to default UGI settings since some tests change them.
@@ -465,6 +470,32 @@ public void testEmptyConf() {
465470
}
466471
}
467472

473+
@Test
474+
public void testGetNamenodeWebAddr() {
475+
HdfsConfiguration conf = new HdfsConfiguration();
476+
477+
conf.set(DFSUtil.addKeySuffixes(
478+
DFS_NAMENODE_HTTPS_ADDRESS_KEY, "ns1", "nn1"), NS1_NN1_HTTPS_ADDR);
479+
conf.set(DFSUtil.addKeySuffixes(
480+
DFS_NAMENODE_HTTP_ADDRESS_KEY, "ns1", "nn1"), NS1_NN1_HTTP_ADDR);
481+
482+
conf.set(DFS_HTTP_POLICY_KEY, HttpConfig.Policy.HTTPS_ONLY.name());
483+
String httpsOnlyWebAddr = DFSUtil.getNamenodeWebAddr(
484+
conf, "ns1", "nn1");
485+
assertEquals(NS1_NN1_HTTPS_ADDR, httpsOnlyWebAddr);
486+
487+
conf.set(DFS_HTTP_POLICY_KEY, HttpConfig.Policy.HTTP_ONLY.name());
488+
String httpOnlyWebAddr = DFSUtil.getNamenodeWebAddr(
489+
conf, "ns1", "nn1");
490+
assertEquals(NS1_NN1_HTTP_ADDR, httpOnlyWebAddr);
491+
492+
conf.set(DFS_HTTP_POLICY_KEY, HttpConfig.Policy.HTTP_AND_HTTPS.name());
493+
String httpAndHttpsWebAddr = DFSUtil.getNamenodeWebAddr(
494+
conf, "ns1", "nn1");
495+
assertEquals(NS1_NN1_HTTP_ADDR, httpAndHttpsWebAddr);
496+
497+
}
498+
468499
@Test
469500
public void testGetInfoServer() throws IOException, URISyntaxException {
470501
HdfsConfiguration conf = new HdfsConfiguration();

0 commit comments

Comments
 (0)