Reverting HDFS-5307 & HDFS-5317 from branch-2.2.0 since rc0 for hadoop-2.2.0 is already out.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2.2.0@1530132 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 7f11743..6c385fb 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -64,12 +64,6 @@
HDFS-5259. Support client which combines appended data with old data
before sends it to NFS server. (brandonli)
- HDFS-5307. Support both HTTP and HTTPS in jsp pages (Haohui Mai via
- branconli)
-
- HDFS-5317. Go back to DFS Home link does not work on datanode webUI
- (Haohui Mai via brandonli)
-
Release 2.1.1-beta - 2013-09-23
INCOMPATIBLE CHANGES
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java
index 0db4e87..02fb54e 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java
@@ -19,7 +19,6 @@
package org.apache.hadoop.hdfs.server.common;
import com.google.common.base.Charsets;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience;
@@ -56,7 +55,6 @@
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspWriter;
-
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
@@ -103,7 +101,7 @@
return super.hashCode();
}
}
-
+
// compare two records based on their frequency
private static class NodeRecordComparator implements Comparator<NodeRecord> {
@@ -117,27 +115,6 @@
return 0;
}
}
-
- /**
- * A helper class that generates the correct URL for different schema.
- *
- */
- public static final class Url {
- public static String authority(String scheme, DatanodeID d) {
- if (scheme.equals("http")) {
- return d.getInfoAddr();
- } else if (scheme.equals("https")) {
- return d.getInfoSecureAddr();
- } else {
- throw new IllegalArgumentException("Unknown scheme:" + scheme);
- }
- }
-
- public static String url(String scheme, DatanodeID d) {
- return scheme + "://" + authority(scheme, d);
- }
- }
-
public static DatanodeInfo bestNode(LocatedBlocks blks, Configuration conf)
throws IOException {
HashMap<DatanodeInfo, NodeRecord> map =
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java
index 1319ed5..8357897 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java
@@ -18,7 +18,6 @@
package org.apache.hadoop.hdfs.server.datanode;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URL;
@@ -35,7 +34,6 @@
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.UnresolvedLinkException;
import org.apache.hadoop.hdfs.DFSClient;
import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
@@ -46,21 +44,15 @@
import org.apache.hadoop.hdfs.security.token.block.BlockTokenSecretManager;
import org.apache.hadoop.hdfs.server.common.JspHelper;
import org.apache.hadoop.http.HtmlQuoting;
+import org.apache.hadoop.http.HttpConfig;
import org.apache.hadoop.net.NetUtils;
-import org.apache.hadoop.security.AccessControlException;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.util.ServletUtil;
import org.apache.hadoop.util.StringUtils;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-
@InterfaceAudience.Private
public class DatanodeJspHelper {
- private static final int PREV_BLOCK = -1;
- private static final int NEXT_BLOCK = 1;
-
private static DFSClient getDFSClient(final UserGroupInformation user,
final String addr,
final Configuration conf
@@ -143,10 +135,10 @@
out.print("Empty file");
} else {
DatanodeInfo chosenNode = JspHelper.bestNode(firstBlock, conf);
+ String fqdn = canonicalize(chosenNode.getIpAddr());
int datanodePort = chosenNode.getXferPort();
- String redirectLocation = JspHelper.Url.url(req.getScheme(),
- chosenNode)
- + "/browseBlock.jsp?blockId="
+ String redirectLocation = HttpConfig.getSchemePrefix() + fqdn + ":"
+ + chosenNode.getInfoPort() + "/browseBlock.jsp?blockId="
+ firstBlock.getBlock().getBlockId() + "&blockSize="
+ firstBlock.getBlock().getNumBytes() + "&genstamp="
+ firstBlock.getBlock().getGenerationStamp() + "&filename="
@@ -318,8 +310,8 @@
dfs.close();
return;
}
-
- String tailUrl = "///" + JspHelper.Url.authority(req.getScheme(), chosenNode)
+ String fqdn = canonicalize(chosenNode.getIpAddr());
+ String tailUrl = "///" + fqdn + ":" + chosenNode.getInfoPort()
+ "/tail.jsp?filename=" + URLEncoder.encode(filename, "UTF-8")
+ "&namenodeInfoPort=" + namenodeInfoPort
+ "&chunkSizeToView=" + chunkSizeToView
@@ -367,7 +359,8 @@
for (int j = 0; j < locs.length; j++) {
String datanodeAddr = locs[j].getXferAddr();
datanodePort = locs[j].getXferPort();
- String blockUrl = "///" + JspHelper.Url.authority(req.getScheme(), locs[j])
+ fqdn = canonicalize(locs[j].getIpAddr());
+ String blockUrl = "///" + fqdn + ":" + locs[j].getInfoPort()
+ "/browseBlock.jsp?blockId=" + blockidstring
+ "&blockSize=" + blockSize
+ "&filename=" + URLEncoder.encode(filename, "UTF-8")
@@ -497,23 +490,112 @@
out.print("<a href=\"#viewOptions\">Advanced view/download options</a><br>");
out.print("<hr>");
- String authority = req.getServerName() + ":" + req.getServerPort();
- String nextUrl = generateLinksForAdjacentBlock(NEXT_BLOCK, authority,
- datanodePort, startOffset, chunkSizeToView, blockSize, blockId,
- genStamp, dfs, filename, conf, req.getScheme(), tokenString,
- namenodeInfoPort, nnAddr);
- if (nextUrl != null) {
+ // Determine the prev & next blocks
+ long nextStartOffset = 0;
+ long nextBlockSize = 0;
+ String nextBlockIdStr = null;
+ String nextGenStamp = null;
+ String nextHost = req.getServerName();
+ int nextPort = req.getServerPort();
+ int nextDatanodePort = datanodePort;
+ // determine data for the next link
+ if (startOffset + chunkSizeToView >= blockSize) {
+ // we have to go to the next block from this point onwards
+ List<LocatedBlock> blocks = dfs.getNamenode().getBlockLocations(filename, 0,
+ Long.MAX_VALUE).getLocatedBlocks();
+ for (int i = 0; i < blocks.size(); i++) {
+ if (blocks.get(i).getBlock().getBlockId() == blockId) {
+ if (i != blocks.size() - 1) {
+ LocatedBlock nextBlock = blocks.get(i + 1);
+ nextBlockIdStr = Long.toString(nextBlock.getBlock().getBlockId());
+ nextGenStamp = Long.toString(nextBlock.getBlock()
+ .getGenerationStamp());
+ nextStartOffset = 0;
+ nextBlockSize = nextBlock.getBlock().getNumBytes();
+ DatanodeInfo d = JspHelper.bestNode(nextBlock, conf);
+ nextDatanodePort = d.getXferPort();
+ nextHost = d.getIpAddr();
+ nextPort = d.getInfoPort();
+ }
+ }
+ }
+ } else {
+ // we are in the same block
+ nextBlockIdStr = blockId.toString();
+ nextStartOffset = startOffset + chunkSizeToView;
+ nextBlockSize = blockSize;
+ nextGenStamp = genStamp.toString();
+ }
+ String nextUrl = null;
+ if (nextBlockIdStr != null) {
+ nextUrl = "///" + canonicalize(nextHost) + ":" + nextPort
+ + "/browseBlock.jsp?blockId=" + nextBlockIdStr
+ + "&blockSize=" + nextBlockSize
+ + "&startOffset=" + nextStartOffset
+ + "&genstamp=" + nextGenStamp
+ + "&filename=" + URLEncoder.encode(filename, "UTF-8")
+ + "&chunkSizeToView=" + chunkSizeToView
+ + "&datanodePort=" + nextDatanodePort
+ + "&namenodeInfoPort=" + namenodeInfoPort
+ + JspHelper.getDelegationTokenUrlParam(tokenString)
+ + JspHelper.getUrlParam(JspHelper.NAMENODE_ADDRESS, nnAddr);
out.print("<a href=\"" + nextUrl + "\">View Next chunk</a> ");
}
-
- String prevUrl = generateLinksForAdjacentBlock(PREV_BLOCK, authority,
- datanodePort, startOffset, chunkSizeToView, blockSize, blockId,
- genStamp, dfs, filename, conf, req.getScheme(), tokenString,
- namenodeInfoPort, nnAddr);
- if (prevUrl != null) {
- out.print("<a href=\"" + prevUrl + "\">View Prev chunk</a> ");
+ // determine data for the prev link
+ String prevBlockIdStr = null;
+ String prevGenStamp = null;
+ long prevStartOffset = 0;
+ long prevBlockSize = 0;
+ String prevHost = req.getServerName();
+ int prevPort = req.getServerPort();
+ int prevDatanodePort = datanodePort;
+ if (startOffset == 0) {
+ List<LocatedBlock> blocks = dfs.getNamenode().getBlockLocations(filename, 0,
+ Long.MAX_VALUE).getLocatedBlocks();
+ for (int i = 0; i < blocks.size(); i++) {
+ if (blocks.get(i).getBlock().getBlockId() == blockId) {
+ if (i != 0) {
+ LocatedBlock prevBlock = blocks.get(i - 1);
+ prevBlockIdStr = Long.toString(prevBlock.getBlock().getBlockId());
+ prevGenStamp = Long.toString(prevBlock.getBlock()
+ .getGenerationStamp());
+ prevStartOffset = prevBlock.getBlock().getNumBytes()
+ - chunkSizeToView;
+ if (prevStartOffset < 0)
+ prevStartOffset = 0;
+ prevBlockSize = prevBlock.getBlock().getNumBytes();
+ DatanodeInfo d = JspHelper.bestNode(prevBlock, conf);
+ prevDatanodePort = d.getXferPort();
+ prevHost = d.getIpAddr();
+ prevPort = d.getInfoPort();
+ }
+ }
+ }
+ } else {
+ // we are in the same block
+ prevBlockIdStr = blockId.toString();
+ prevStartOffset = startOffset - chunkSizeToView;
+ if (prevStartOffset < 0)
+ prevStartOffset = 0;
+ prevBlockSize = blockSize;
+ prevGenStamp = genStamp.toString();
}
+ String prevUrl = null;
+ if (prevBlockIdStr != null) {
+ prevUrl = "///" + canonicalize(prevHost) + ":" + prevPort
+ + "/browseBlock.jsp?blockId=" + prevBlockIdStr
+ + "&blockSize=" + prevBlockSize
+ + "&startOffset=" + prevStartOffset
+ + "&filename=" + URLEncoder.encode(filename, "UTF-8")
+ + "&chunkSizeToView=" + chunkSizeToView
+ + "&genstamp=" + prevGenStamp
+ + "&datanodePort=" + prevDatanodePort
+ + "&namenodeInfoPort=" + namenodeInfoPort
+ + JspHelper.getDelegationTokenUrlParam(tokenString)
+ + JspHelper.getUrlParam(JspHelper.NAMENODE_ADDRESS, nnAddr);
+ out.print("<a href=\"" + prevUrl + "\">View Prev chunk</a> ");
+ }
out.print("<hr>");
out.print("<textarea cols=\"100\" rows=\"25\" wrap=\"virtual\" style=\"width:100%\" READONLY>");
try {
@@ -528,71 +610,6 @@
dfs.close();
}
- private static String generateLinksForAdjacentBlock(final int direction,
- String authority, int datanodePort, long startOffset,
- int chunkSizeToView, long blockSize, long blockId, Long genStamp,
- final DFSClient dfs, final String filename, final Configuration conf,
- final String scheme, final String tokenString,
- final int namenodeInfoPort, final String nnAddr)
- throws AccessControlException, FileNotFoundException,
- UnresolvedLinkException, IOException {
-
- boolean found = false;
- if ((direction == NEXT_BLOCK && startOffset + chunkSizeToView < blockSize)
- || (direction == PREV_BLOCK && startOffset != 0)) {
- // we are in the same block
- found = true;
-
- if (direction == NEXT_BLOCK) {
- startOffset = startOffset + chunkSizeToView;
- } else {
- startOffset = Math.max(0, startOffset - chunkSizeToView);
- }
- } else {
- List<LocatedBlock> blocks = dfs.getNamenode().getBlockLocations(filename, 0,
- Long.MAX_VALUE).getLocatedBlocks();
-
- final long curBlockId = blockId;
- int curBlockIdx = Iterables.indexOf(blocks, new Predicate<LocatedBlock>() {
- @Override
- public boolean apply(LocatedBlock b) {
- return b.getBlock().getBlockId() == curBlockId;
- }
- });
- found = curBlockIdx != -1 &&
- ((direction == NEXT_BLOCK && curBlockIdx < blocks.size() - 1)
- || (direction == PREV_BLOCK && curBlockIdx > 0));
-
- if (found) {
- LocatedBlock nextBlock = blocks.get(curBlockIdx + direction);
-
- blockId = nextBlock.getBlock().getBlockId();
- genStamp = nextBlock.getBlock().getGenerationStamp();
- startOffset = 0;
- blockSize = nextBlock.getBlock().getNumBytes();
- DatanodeInfo d = JspHelper.bestNode(nextBlock, conf);
- datanodePort = d.getXferPort();
- authority = JspHelper.Url.authority(scheme, d);
- }
- }
-
- if (found) {
- return "///" + authority
- + "/browseBlock.jsp?blockId=" + blockId
- + "&blockSize=" + blockSize
- + "&startOffset=" + startOffset
- + "&genstamp=" + genStamp
- + "&filename=" + URLEncoder.encode(filename, "UTF-8")
- + "&chunkSizeToView=" + chunkSizeToView
- + "&datanodePort=" + datanodePort
- + "&namenodeInfoPort=" + namenodeInfoPort
- + JspHelper.getDelegationTokenUrlParam(tokenString)
- + JspHelper.getUrlParam(JspHelper.NAMENODE_ADDRESS, nnAddr);
- } else {
- return null;
- }
- }
-
static void generateFileChunksForTail(JspWriter out, HttpServletRequest req,
Configuration conf
) throws IOException,
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java
index c3e4987..3f43edd 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java
@@ -887,16 +887,7 @@
private static String queryMbean(String httpAddress, Configuration conf)
throws IOException {
- /**
- * Although the other namenode might support HTTPS, it is fundamentally
- * broken to get the JMX via an HTTPS connection inside the namenode,
- * because in HTTPS set up the principal of the client and the one of
- * the namenode differs. Therefore, there is no guarantees that the
- * HTTPS connection can be set up.
- *
- * As a result, we just hard code the connection as an HTTP connection.
- */
- URL url = new URL("http://" + httpAddress + JMX_QRY);
+ URL url = new URL(HttpConfig.getSchemePrefix() + httpAddress+JMX_QRY);
return readOutput(url);
}
/**
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java
index 8957765..8c5386c 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java
@@ -642,21 +642,25 @@
// We can't redirect if there isn't a DN to redirect to.
// Lets instead show a proper error message.
FSNamesystem fsn = nn.getNamesystem();
-
- DatanodeID datanode = null;
- if (fsn != null && fsn.getNumLiveDataNodes() >= 1) {
- datanode = getRandomDatanode(nn);
- }
-
- if (datanode == null) {
+ if (fsn == null || fsn.getNumLiveDataNodes() < 1) {
throw new IOException("Can't browse the DFS since there are no " +
"live nodes available to redirect to.");
}
-
+ final DatanodeID datanode = getRandomDatanode(nn);;
UserGroupInformation ugi = JspHelper.getUGI(context, request, conf);
- // if the user is defined, get a delegation token and stringify it
String tokenString = getDelegationToken(
nn.getRpcServer(), request, conf, ugi);
+ // if the user is defined, get a delegation token and stringify it
+ final String redirectLocation;
+ final String nodeToRedirect;
+ int redirectPort;
+ if (datanode != null) {
+ nodeToRedirect = datanode.getIpAddr();
+ redirectPort = datanode.getInfoPort();
+ } else {
+ nodeToRedirect = nn.getHttpAddress().getHostName();
+ redirectPort = nn.getHttpAddress().getPort();
+ }
InetSocketAddress rpcAddr = nn.getNameNodeAddress();
String rpcHost = rpcAddr.getAddress().isAnyLocalAddress()
@@ -664,14 +668,13 @@
: rpcAddr.getAddress().getHostAddress();
String addr = rpcHost + ":" + rpcAddr.getPort();
- final String redirectLocation =
- JspHelper.Url.url(request.getScheme(), datanode)
+ String fqdn = InetAddress.getByName(nodeToRedirect).getCanonicalHostName();
+ redirectLocation = HttpConfig.getSchemePrefix() + fqdn + ":" + redirectPort
+ "/browseDirectory.jsp?namenodeInfoPort="
- + request.getServerPort() + "&dir=/"
+ + nn.getHttpAddress().getPort() + "&dir=/"
+ (tokenString == null ? "" :
JspHelper.getDelegationTokenUrlParam(tokenString))
+ JspHelper.getUrlParam(JspHelper.NAMENODE_ADDRESS, addr);
-
resp.sendRedirect(redirectLocation);
}
@@ -726,11 +729,12 @@
}
private void generateNodeDataHeader(JspWriter out, DatanodeDescriptor d,
- String suffix, boolean alive, int nnInfoPort, String nnaddr, String scheme)
+ String suffix, boolean alive, int nnHttpPort, String nnaddr)
throws IOException {
// from nn_browsedfscontent.jsp:
- String url = "///" + JspHelper.Url.authority(scheme, d)
- + "/browseDirectory.jsp?namenodeInfoPort=" + nnInfoPort + "&dir="
+ String url = "///" + d.getHostName() + ":"
+ + d.getInfoPort()
+ + "/browseDirectory.jsp?namenodeInfoPort=" + nnHttpPort + "&dir="
+ URLEncoder.encode("/", "UTF-8")
+ JspHelper.getUrlParam(JspHelper.NAMENODE_ADDRESS, nnaddr);
@@ -747,9 +751,9 @@
}
void generateDecommissioningNodeData(JspWriter out, DatanodeDescriptor d,
- String suffix, boolean alive, int nnInfoPort, String nnaddr, String scheme)
+ String suffix, boolean alive, int nnHttpPort, String nnaddr)
throws IOException {
- generateNodeDataHeader(out, d, suffix, alive, nnInfoPort, nnaddr, scheme);
+ generateNodeDataHeader(out, d, suffix, alive, nnHttpPort, nnaddr);
if (!alive) {
return;
}
@@ -773,7 +777,7 @@
}
void generateNodeData(JspWriter out, DatanodeDescriptor d, String suffix,
- boolean alive, int nnInfoPort, String nnaddr, String scheme) throws IOException {
+ boolean alive, int nnHttpPort, String nnaddr) throws IOException {
/*
* Say the datanode is dn1.hadoop.apache.org with ip 192.168.0.5 we use:
* 1) d.getHostName():d.getPort() to display. Domain and port are stripped
@@ -785,7 +789,7 @@
* interact with datanodes.
*/
- generateNodeDataHeader(out, d, suffix, alive, nnInfoPort, nnaddr, scheme);
+ generateNodeDataHeader(out, d, suffix, alive, nnHttpPort, nnaddr);
if (!alive) {
out.print("<td class=\"decommissioned\"> " +
d.isDecommissioned() + "\n");
@@ -851,8 +855,11 @@
final List<DatanodeDescriptor> dead = new ArrayList<DatanodeDescriptor>();
dm.fetchDatanodes(live, dead, true);
- String nnaddr = nn.getServiceRpcAddress().getAddress().getHostName() + ":"
- + nn.getServiceRpcAddress().getPort();
+ InetSocketAddress nnSocketAddress =
+ (InetSocketAddress)context.getAttribute(
+ NameNodeHttpServer.NAMENODE_ADDRESS_ATTRIBUTE_KEY);
+ String nnaddr = nnSocketAddress.getAddress().getHostAddress() + ":"
+ + nnSocketAddress.getPort();
whatNodes = request.getParameter("whatNodes"); // show only live or only
// dead nodes
@@ -888,11 +895,16 @@
counterReset();
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ }
+
if (live.isEmpty() && dead.isEmpty()) {
out.print("There are no datanodes in the cluster");
} else {
- int nnInfoPort = request.getServerPort();
+ int nnHttpPort = nn.getHttpAddress().getPort();
out.print("<div id=\"dfsnodetable\"> ");
if (whatNodes.equals("LIVE")) {
out.print("<a name=\"LiveNodes\" id=\"title\">" + "Live Datanodes : "
@@ -934,8 +946,8 @@
JspHelper.sortNodeList(live, sorterField, sorterOrder);
for (int i = 0; i < live.size(); i++) {
- generateNodeData(out, live.get(i), port_suffix, true, nnInfoPort,
- nnaddr, request.getScheme());
+ generateNodeData(out, live.get(i), port_suffix, true, nnHttpPort,
+ nnaddr);
}
}
out.print("</table>\n");
@@ -955,7 +967,7 @@
JspHelper.sortNodeList(dead, sorterField, sorterOrder);
for (int i = 0; i < dead.size(); i++) {
generateNodeData(out, dead.get(i), port_suffix, false,
- nnInfoPort, nnaddr, request.getScheme());
+ nnHttpPort, nnaddr);
}
out.print("</table>\n");
@@ -986,7 +998,7 @@
JspHelper.sortNodeList(decommissioning, "name", "ASC");
for (int i = 0; i < decommissioning.size(); i++) {
generateDecommissioningNodeData(out, decommissioning.get(i),
- port_suffix, true, nnInfoPort, nnaddr, request.getScheme());
+ port_suffix, true, nnHttpPort, nnaddr);
}
out.print("</table>\n");
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java
index 147d12e..ecd8bf7 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java
@@ -61,10 +61,9 @@
InetSocketAddress nnIpcAddress = cluster.getNameNode().getNameNodeAddress();
InetSocketAddress nnHttpAddress = cluster.getNameNode().getHttpAddress();
- String base = JspHelper.Url.url("http", cluster.getDataNodes().get(0)
- .getDatanodeId());
-
- URL url = new URL(base + "/"
+ int dnInfoPort = cluster.getDataNodes().get(0).getInfoPort();
+
+ URL url = new URL("http://localhost:" + dnInfoPort + "/"
+ "browseDirectory.jsp" + JspHelper.getUrlParam("dir",
URLEncoder.encode(testPath.toString(), "UTF-8"), true)
+ JspHelper.getUrlParam("namenodeInfoPort", Integer
@@ -87,9 +86,6 @@
// check whether able to 'Go Back to File View' after tailing the file
regex = "<a.+href=\"(.+?)\">Go\\s*Back\\s*to\\s*File\\s*View\\<\\/a\\>";
assertFileContents(regex, "Go Back to File View");
-
- regex = "<a href=\"///localhost:" + nnHttpAddress.getPort() + "/dfshealth.jsp\">Go back to DFS home</a>";
- assertTrue("page should generate DFS home scheme without explicit scheme", viewFilePage.contains(regex));
}
private static void assertFileContents(String regex, String text)
@@ -170,7 +166,6 @@
Mockito.doReturn(NetUtils.getHostPortString(NameNode.getAddress(CONF)))
.when(reqMock).getParameter("nnaddr");
Mockito.doReturn(testFile.toString()).when(reqMock).getPathInfo();
- Mockito.doReturn("http").when(reqMock).getScheme();
}
static Path writeFile(FileSystem fs, Path f) throws IOException {