HBASE-3 rest server: configure number of threads for jetty

HBASE-416 Add apache-style logging to REST server and add setting log level, etc.


git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@619694 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2008-02-08 00:10:45 +00:00
parent 655065bcca
commit ea98b03b76
3 changed files with 52 additions and 9 deletions

View File

@ -27,6 +27,10 @@ Hbase Change Log
(Edward Yoon & Bryan Duxbury via Stack)
HBASE-56 Unnecessary HQLClient Object creation in a shell loop
(Edward Yoon via Stack)
HBASE-3 rest server: configure number of threads for jetty
(Bryan Duxbury via Stack)
HBASE-416 Add apache-style logging to REST server and add setting log
level, etc.
Branch 0.1

View File

@ -381,7 +381,7 @@ public class HConnectionManager implements HConstants {
if (location != null) {
return location;
}
} else{
} else {
deleteCachedLocation(tableName, row);
}
@ -509,7 +509,14 @@ public class HConnectionManager implements HConstants {
// if there's something in the cache for this table.
if (!tableLocations.isEmpty()) {
if (tableLocations.containsKey(row)) {
return tableLocations.get(row);
HRegionLocation rl = tableLocations.get(row);
if (rl != null && LOG.isDebugEnabled()) {
LOG.debug("Cache hit in table locations for row <" +
row + "> and tableName " + tableName +
": location server " + rl.getServerAddress() +
", location region name " + rl.getRegionInfo().getRegionName());
}
return rl;
}
// cut the cache so that we only get the part that could contain
@ -532,6 +539,10 @@ public class HConnectionManager implements HConstants {
// signifying that the region we're checking is actually the last
// region in the table.
if (endKey.equals(EMPTY_TEXT) || endKey.compareTo(row) > 0) {
if (LOG.isDebugEnabled()) {
LOG.debug("Found possible location for " + row + ", " +
possibleRegion);
}
return possibleRegion;
}
}
@ -541,7 +552,6 @@ public class HConnectionManager implements HConstants {
return null;
}
/**
* Delete a cached location, if it satisfies the table name and row
* requirements.
@ -578,13 +588,17 @@ public class HConnectionManager implements HConstants {
// otherwise it wouldn't be in the headMap.
if (endKey.compareTo(row) <= 0) {
// delete any matching entry
tableLocations.remove(matchingRegions.lastKey());
HRegionLocation rl =
tableLocations.remove(matchingRegions.lastKey());
if (rl != null && LOG.isDebugEnabled()) {
LOG.debug("Removed " + rl.getRegionInfo().getRegionName() +
" from cache because of " + row);
}
}
}
}
}
}
/**
* Put a newly discovered HRegionLocation into the cache.
*/
@ -729,6 +743,9 @@ public class HConnectionManager implements HConstants {
// if this works, then we're good, and we have an acceptable address,
// so we can stop doing retries and return the result.
server.getRegionInfo(HRegionInfo.rootRegionInfo.getRegionName());
if (LOG.isDebugEnabled()) {
LOG.debug("Found ROOT " + HRegionInfo.rootRegionInfo);
}
break;
} catch (IOException e) {
if (tries == numRetries - 1) {
@ -757,7 +774,7 @@ public class HConnectionManager implements HConstants {
rootRegionAddress = null;
}
// if the adress is null by this point, then the retries have failed,
// if the address is null by this point, then the retries have failed,
// and we're sort of sunk
if (rootRegionAddress == null) {
throw new NoServerForRegionException(

View File

@ -22,13 +22,19 @@ package org.apache.hadoop.hbase.rest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.HBaseAdmin;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.util.InfoServer;
import org.apache.hadoop.mapred.StatusHttpServer;
import org.mortbay.http.NCSARequestLog;
import org.mortbay.http.SocketListener;
import org.mortbay.jetty.servlet.WebApplicationContext;
/**
* Servlet implementation class for hbase REST interface.
@ -54,6 +60,7 @@ import org.mortbay.http.SocketListener;
*/
public class Dispatcher extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {
private static final Log LOG = LogFactory.getLog(Dispatcher.class.getName());
private MetaHandler metaHandler;
private TableHandler tableHandler;
private ScannerHandler scannerHandler;
@ -179,7 +186,9 @@ implements javax.servlet.Servlet {
System.out.println("Options:");
System.out.println(" port Port to listen on. Default: 60050.");
System.out.println(" bind Address to bind on. Default: 0.0.0.0.");
System.out.println(" max-num-threads The maximum number of threads for Jetty to run. Defaults to 256.");
System.out.println(" help Print this message and exit.");
System.exit(0);
}
@ -194,11 +203,13 @@ implements javax.servlet.Servlet {
int port = 60050;
String bindAddress = "0.0.0.0";
int numThreads = 256;
// Process command-line args. TODO: Better cmd-line processing
// (but hopefully something not as painful as cli options).
final String addressArgKey = "--bind=";
final String portArgKey = "--port=";
final String numThreadsKey = "--max-num-threads=";
for (String cmd: args) {
if (cmd.startsWith(addressArgKey)) {
bindAddress = cmd.substring(addressArgKey.length());
@ -214,18 +225,29 @@ implements javax.servlet.Servlet {
printUsageAndExit("To shutdown the REST server run " +
"bin/hbase-daemon.sh stop rest or send a kill signal to " +
"the REST server pid");
} else if (cmd.startsWith(numThreadsKey)) {
numThreads = Integer.parseInt(cmd.substring(numThreadsKey.length()));
continue;
}
// Print out usage if we get to here.
printUsageAndExit();
}
org.mortbay.jetty.Server webServer = new org.mortbay.jetty.Server();
SocketListener listener = new SocketListener();
listener.setPort(port);
listener.setHost(bindAddress);
listener.setMaxThreads(numThreads);
webServer.addListener(listener);
webServer.addWebApplication("/api", InfoServer.getWebAppDir("rest"));
NCSARequestLog ncsa = new NCSARequestLog();
ncsa.setLogLatency(true);
webServer.setRequestLog(ncsa);
WebApplicationContext context =
webServer.addWebApplication("/api", InfoServer.getWebAppDir("rest"));
context.addServlet("stacks", "/stacks",
StatusHttpServer.StackServlet.class.getName());
context.addServlet("logLevel", "/logLevel",
org.apache.hadoop.log.LogLevel.Servlet.class.getName());
webServer.start();
}