Author: acmurthy Date: Tue Oct 8 02:13:58 2013 New Revision: 1530132 URL: http://svn.apache.org/r1530132 Log: Reverting HDFS-5307 & HDFS-5317 from branch-2.2.0 since rc0 for hadoop-2.2.0 is already out.
Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1530132&r1=1530131&r2=1530132&view=diff ============================================================================== --- hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Tue Oct 8 02:13:58 2013 @@ -64,12 +64,6 @@ Release 2.2.0 - 2013-10-13 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 Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java?rev=1530132&r1=1530131&r2=1530132&view=diff ============================================================================== --- hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java (original) +++ hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/JspHelper.java Tue Oct 8 02:13:58 2013 @@ -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 org.apache.hadoop.util.VersionInf 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 @@ public class JspHelper { return super.hashCode(); } } - + // compare two records based on their frequency private static class NodeRecordComparator implements Comparator<NodeRecord> { @@ -117,27 +115,6 @@ public class JspHelper { 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 = Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java?rev=1530132&r1=1530131&r2=1530132&view=diff ============================================================================== --- hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java (original) +++ hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DatanodeJspHelper.java Tue Oct 8 02:13:58 2013 @@ -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 javax.servlet.jsp.JspWriter; 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.t 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 @@ public class DatanodeJspHelper { 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 @@ public class DatanodeJspHelper { 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 @@ public class DatanodeJspHelper { 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 @@ public class DatanodeJspHelper { 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> "); } + // 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 = generateLinksForAdjacentBlock(PREV_BLOCK, authority, - datanodePort, startOffset, chunkSizeToView, blockSize, blockId, - genStamp, dfs, filename, conf, req.getScheme(), tokenString, - namenodeInfoPort, nnAddr); - if (prevUrl != null) { + 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 @@ public class DatanodeJspHelper { 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, Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java?rev=1530132&r1=1530131&r2=1530132&view=diff ============================================================================== --- hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java (original) +++ hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ClusterJspHelper.java Tue Oct 8 02:13:58 2013 @@ -887,16 +887,7 @@ class ClusterJspHelper { 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); } /** Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java?rev=1530132&r1=1530131&r2=1530132&view=diff ============================================================================== --- hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java (original) +++ hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeJspHelper.java Tue Oct 8 02:13:58 2013 @@ -642,21 +642,25 @@ class NamenodeJspHelper { // 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 @@ class NamenodeJspHelper { : 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 @@ class NamenodeJspHelper { } 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 @@ class NamenodeJspHelper { } 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 @@ class NamenodeJspHelper { } 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 @@ class NamenodeJspHelper { * 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 @@ class NamenodeJspHelper { 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 @@ class NamenodeJspHelper { 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 @@ class NamenodeJspHelper { 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 @@ class NamenodeJspHelper { 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 @@ class NamenodeJspHelper { 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"); } Modified: hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java?rev=1530132&r1=1530131&r2=1530132&view=diff ============================================================================== --- hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java (original) +++ hadoop/common/branches/branch-2.2.0/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDatanodeJsp.java Tue Oct 8 02:13:58 2013 @@ -61,10 +61,9 @@ public class TestDatanodeJsp { 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 @@ public class TestDatanodeJsp { // 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 @@ public class TestDatanodeJsp { 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 {