DfsServlet.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.hdfs.server.namenode;
  19. import java.io.IOException;
  20. import java.net.InetSocketAddress;
  21. import java.net.URI;
  22. import java.net.URISyntaxException;
  23. import javax.servlet.ServletContext;
  24. import javax.servlet.http.HttpServlet;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import org.apache.commons.logging.Log;
  28. import org.apache.commons.logging.LogFactory;
  29. import org.apache.hadoop.conf.Configuration;
  30. import org.apache.hadoop.hdfs.DFSClient;
  31. import org.apache.hadoop.hdfs.protocol.ClientProtocol;
  32. import org.apache.hadoop.hdfs.protocol.DatanodeID;
  33. import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
  34. import org.apache.hadoop.security.UnixUserGroupInformation;
  35. import org.apache.hadoop.security.UserGroupInformation;
  36. /**
  37.  * A base class for the servlets in DFS.
  38.  */
  39. abstract class DfsServlet extends HttpServlet {
  40.   /** For java.io.Serializable */
  41.   private static final long serialVersionUID = 1L;
  42.   static final Log LOG = LogFactory.getLog(DfsServlet.class.getCanonicalName());
  43.   /** Get {@link UserGroupInformation} from request */
  44.   protected UnixUserGroupInformation getUGI(HttpServletRequest request) {
  45.     String ugi = request.getParameter("ugi");
  46.     try {
  47.       return new UnixUserGroupInformation(ugi.split(","));
  48.     }
  49.     catch(Exception e) {
  50.       LOG.warn("Invalid ugi (= " + ugi + ")");
  51.     }
  52.     return JspHelper.webUGI;
  53.   }
  54.   /**
  55.    * Create a {@link NameNode} proxy from the current {@link ServletContext}. 
  56.    */
  57.   protected ClientProtocol createNameNodeProxy(UnixUserGroupInformation ugi
  58.       ) throws IOException {
  59.     ServletContext context = getServletContext();
  60.     InetSocketAddress nnAddr = (InetSocketAddress)context.getAttribute("name.node.address");
  61.     Configuration conf = new Configuration(
  62.         (Configuration)context.getAttribute("name.conf"));
  63.     UnixUserGroupInformation.saveToConf(conf,
  64.         UnixUserGroupInformation.UGI_PROPERTY_NAME, ugi);
  65.     return DFSClient.createNamenode(nnAddr, conf);
  66.   }
  67.   /** Create a URI for redirecting request */
  68.   protected URI createRedirectUri(String servletpath, UserGroupInformation ugi,
  69.       DatanodeID host, HttpServletRequest request) throws URISyntaxException {
  70.     final String hostname = host instanceof DatanodeInfo?
  71.         ((DatanodeInfo)host).getHostName(): host.getHost();
  72.     final String scheme = request.getScheme();
  73.     final int port = "https".equals(scheme)?
  74.         (Integer)getServletContext().getAttribute("datanode.https.port")
  75.         : host.getInfoPort();
  76.     final String filename = request.getPathInfo();
  77.     return new URI(scheme, null, hostname, port, servletpath,
  78.         "filename=" + filename + "&ugi=" + ugi, null);
  79.   }
  80.   /** Get filename from the request */
  81.   protected String getFilename(HttpServletRequest request,
  82.       HttpServletResponse response) throws IOException {
  83.     final String filename = request.getParameter("filename");
  84.     if (filename == null || filename.length() == 0) {
  85.       throw new IOException("Invalid filename");
  86.     }
  87.     return filename;
  88.   }
  89. }