You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ll...@apache.org on 2013/08/21 12:12:13 UTC
svn commit: r1516128 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: ./
src/main/java/org/apache/hadoop/http/ src/test/java/org/apache/hadoop/http/
src/test/java/org/apache/hadoop/log/
Author: llu
Date: Wed Aug 21 10:12:13 2013
New Revision: 1516128
URL: http://svn.apache.org/r1516128
Log:
HADOOP-9784. Add a builder for HttpServer. (Junping Du via llu)
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/HttpServerFunctionalTest.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/log/TestLogLevel.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1516128&r1=1516127&r2=1516128&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Wed Aug 21 10:12:13 2013
@@ -291,6 +291,8 @@ Release 2.3.0 - UNRELEASED
IMPROVEMENTS
+ HADOOP-9784. Add a builder for HttpServer. (Junping Du via llu)
+
HADOOP 9871. Fix intermittent findbugs warnings in DefaultMetricsSystem.
(Junping Du via llu)
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java?rev=1516128&r1=1516127&r2=1516128&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java Wed Aug 21 10:12:13 2013
@@ -47,6 +47,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.conf.ConfServlet;
@@ -119,18 +120,117 @@ public class HttpServer implements Filte
protected final Map<Context, Boolean> defaultContexts =
new HashMap<Context, Boolean>();
protected final List<String> filterNames = new ArrayList<String>();
- private static final int MAX_RETRIES = 10;
static final String STATE_DESCRIPTION_ALIVE = " - alive";
static final String STATE_DESCRIPTION_NOT_LIVE = " - not live";
private final boolean listenerStartedExternally;
+ /**
+ * Class to construct instances of HTTP server with specific options.
+ */
+ public static class Builder {
+ String name;
+ String bindAddress;
+ Integer port;
+ Boolean findPort;
+ Configuration conf;
+ Connector connector;
+ String[] pathSpecs;
+ AccessControlList adminsAcl;
+ boolean securityEnabled = false;
+ String usernameConfKey = null;
+ String keytabConfKey = null;
+
+ public Builder setName(String name){
+ this.name = name;
+ return this;
+ }
+
+ public Builder setBindAddress(String bindAddress){
+ this.bindAddress = bindAddress;
+ return this;
+ }
+
+ public Builder setPort(int port) {
+ this.port = port;
+ return this;
+ }
+
+ public Builder setFindPort(boolean findPort) {
+ this.findPort = findPort;
+ return this;
+ }
+
+ public Builder setConf(Configuration conf) {
+ this.conf = conf;
+ return this;
+ }
+
+ public Builder setConnector(Connector connector) {
+ this.connector = connector;
+ return this;
+ }
+
+ public Builder setPathSpec(String[] pathSpec) {
+ this.pathSpecs = pathSpec;
+ return this;
+ }
+
+ public Builder setACL(AccessControlList acl) {
+ this.adminsAcl = acl;
+ return this;
+ }
+
+ public Builder setSecurityEnabled(boolean securityEnabled) {
+ this.securityEnabled = securityEnabled;
+ return this;
+ }
+
+ public Builder setUsernameConfKey(String usernameConfKey) {
+ this.usernameConfKey = usernameConfKey;
+ return this;
+ }
+
+ public Builder setKeytabConfKey(String keytabConfKey) {
+ this.keytabConfKey = keytabConfKey;
+ return this;
+ }
+
+ public HttpServer build() throws IOException {
+ if (this.name == null) {
+ throw new HadoopIllegalArgumentException("name is not set");
+ }
+ if (this.bindAddress == null) {
+ throw new HadoopIllegalArgumentException("bindAddress is not set");
+ }
+ if (this.port == null) {
+ throw new HadoopIllegalArgumentException("port is not set");
+ }
+ if (this.findPort == null) {
+ throw new HadoopIllegalArgumentException("findPort is not set");
+ }
+
+ if (this.conf == null) {
+ conf = new Configuration();
+ }
+
+ HttpServer server = new HttpServer(this.name, this.bindAddress, this.port,
+ this.findPort, this.conf, this.adminsAcl, this.connector, this.pathSpecs);
+ if (this.securityEnabled) {
+ server.initSpnego(this.conf, this.usernameConfKey, this.keytabConfKey);
+ }
+ return server;
+ }
+ }
+
/** Same as this(name, bindAddress, port, findPort, null); */
+ @Deprecated
public HttpServer(String name, String bindAddress, int port, boolean findPort
) throws IOException {
this(name, bindAddress, port, findPort, new Configuration());
}
-
+
+ @Deprecated
public HttpServer(String name, String bindAddress, int port,
boolean findPort, Configuration conf, Connector connector) throws IOException {
this(name, bindAddress, port, findPort, conf, null, connector, null);
@@ -150,6 +250,7 @@ public class HttpServer implements Filte
* @param pathSpecs Path specifications that this httpserver will be serving.
* These will be added to any filters.
*/
+ @Deprecated
public HttpServer(String name, String bindAddress, int port,
boolean findPort, Configuration conf, String[] pathSpecs) throws IOException {
this(name, bindAddress, port, findPort, conf, null, null, pathSpecs);
@@ -164,11 +265,13 @@ public class HttpServer implements Filte
* increment by 1 until it finds a free port.
* @param conf Configuration
*/
+ @Deprecated
public HttpServer(String name, String bindAddress, int port,
boolean findPort, Configuration conf) throws IOException {
this(name, bindAddress, port, findPort, conf, null, null, null);
}
+ @Deprecated
public HttpServer(String name, String bindAddress, int port,
boolean findPort, Configuration conf, AccessControlList adminsAcl)
throws IOException {
@@ -186,6 +289,7 @@ public class HttpServer implements Filte
* @param conf Configuration
* @param adminsAcl {@link AccessControlList} of the admins
*/
+ @Deprecated
public HttpServer(String name, String bindAddress, int port,
boolean findPort, Configuration conf, AccessControlList adminsAcl,
Connector connector) throws IOException {
@@ -529,7 +633,7 @@ public class HttpServer implements Filte
/**
* Define a filter for a context and set up default url mappings.
*/
- protected void defineFilter(Context ctx, String name,
+ public void defineFilter(Context ctx, String name,
String classname, Map<String,String> parameters, String[] urls) {
FilterHolder holder = new FilterHolder();
@@ -569,6 +673,10 @@ public class HttpServer implements Filte
public Object getAttribute(String name) {
return webAppContext.getAttribute(name);
}
+
+ public WebAppContext getWebAppContext(){
+ return this.webAppContext;
+ }
/**
* Get the pathname to the webapps files.
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/HttpServerFunctionalTest.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/HttpServerFunctionalTest.java?rev=1516128&r1=1516127&r2=1516128&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/HttpServerFunctionalTest.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/HttpServerFunctionalTest.java Wed Aug 21 10:12:13 2013
@@ -116,7 +116,8 @@ public class HttpServerFunctionalTest ex
public static HttpServer createServer(String host, int port)
throws IOException {
prepareTestWebapp();
- return new HttpServer(TEST, host, port, true);
+ return new HttpServer.Builder().setName(TEST).setBindAddress(host)
+ .setPort(port).setFindPort(true).build();
}
/**
@@ -126,7 +127,8 @@ public class HttpServerFunctionalTest ex
* @throws IOException if it could not be created
*/
public static HttpServer createServer(String webapp) throws IOException {
- return new HttpServer(webapp, "0.0.0.0", 0, true);
+ return new HttpServer.Builder().setName(webapp).setBindAddress("0.0.0.0")
+ .setPort(0).setFindPort(true).build();
}
/**
* Create an HttpServer instance for the given webapp
@@ -137,13 +139,16 @@ public class HttpServerFunctionalTest ex
*/
public static HttpServer createServer(String webapp, Configuration conf)
throws IOException {
- return new HttpServer(webapp, "0.0.0.0", 0, true, conf);
+ return new HttpServer.Builder().setName(webapp).setBindAddress("0.0.0.0")
+ .setPort(0).setFindPort(true).setConf(conf).build();
}
public static HttpServer createServer(String webapp, Configuration conf, AccessControlList adminsAcl)
throws IOException {
- return new HttpServer(webapp, "0.0.0.0", 0, true, conf, adminsAcl);
+ return new HttpServer.Builder().setName(webapp).setBindAddress("0.0.0.0")
+ .setPort(0).setFindPort(true).setConf(conf).setACL(adminsAcl).build();
}
+
/**
* Create an HttpServer instance for the given webapp
* @param webapp the webapp to work with
@@ -154,7 +159,8 @@ public class HttpServerFunctionalTest ex
*/
public static HttpServer createServer(String webapp, Configuration conf,
String[] pathSpecs) throws IOException {
- return new HttpServer(webapp, "0.0.0.0", 0, true, conf, pathSpecs);
+ return new HttpServer.Builder().setName(webapp).setBindAddress("0.0.0.0")
+ .setPort(0).setFindPort(true).setConf(conf).setPathSpec(pathSpecs).build();
}
/**
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java?rev=1516128&r1=1516127&r2=1516128&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java Wed Aug 21 10:12:13 2013
@@ -121,7 +121,6 @@ public class TestHttpServer extends Http
@SuppressWarnings("serial")
public static class LongHeaderServlet extends HttpServlet {
- @SuppressWarnings("unchecked")
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response
@@ -362,7 +361,8 @@ public class TestHttpServer extends Http
MyGroupsProvider.mapping.put("userA", Arrays.asList("groupA"));
MyGroupsProvider.mapping.put("userB", Arrays.asList("groupB"));
- HttpServer myServer = new HttpServer("test", "0.0.0.0", 0, true, conf);
+ HttpServer myServer = new HttpServer.Builder().setName("test")
+ .setBindAddress("0.0.0.0").setPort(0).setFindPort(true).build();
myServer.setAttribute(HttpServer.CONF_CONTEXT_ATTRIBUTE, conf);
myServer.start();
int port = myServer.getPort();
@@ -403,8 +403,9 @@ public class TestHttpServer extends Http
MyGroupsProvider.mapping.put("userD", Arrays.asList("groupD"));
MyGroupsProvider.mapping.put("userE", Arrays.asList("groupE"));
- HttpServer myServer = new HttpServer("test", "0.0.0.0", 0, true, conf,
- new AccessControlList("userA,userB groupC,groupD"));
+ HttpServer myServer = new HttpServer.Builder().setName("test")
+ .setBindAddress("0.0.0.0").setPort(0).setFindPort(true).setConf(conf)
+ .setACL(new AccessControlList("userA,userB groupC,groupD")).build();
myServer.setAttribute(HttpServer.CONF_CONTEXT_ATTRIBUTE, conf);
myServer.start();
int port = myServer.getPort();
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/log/TestLogLevel.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/log/TestLogLevel.java?rev=1516128&r1=1516127&r2=1516128&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/log/TestLogLevel.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/log/TestLogLevel.java Wed Aug 21 10:12:13 2013
@@ -42,7 +42,10 @@ public class TestLogLevel extends TestCa
log.error("log.error1");
assertTrue(!Level.ERROR.equals(log.getEffectiveLevel()));
- HttpServer server = new HttpServer("..", "localhost", 22222, true);
+ HttpServer server = new HttpServer.Builder().setName("..")
+ .setBindAddress("localhost").setPort(22222).setFindPort(true)
+ .build();
+
server.start();
int port = server.getPort();