HADOOP-10588. Workaround for jetty6 acceptor startup issue. Contributed by Kihwal Lee.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1595051 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Kihwal Lee 2014-05-15 21:25:38 +00:00
parent d4d3cf1210
commit 62d86218ef
3 changed files with 69 additions and 2 deletions

View File

@ -51,6 +51,8 @@ Release 2.5.0 - UNRELEASED
HADOOP-10572. Example NFS mount command must pass noacl as it isn't
supported by the server yet. (Harsh J via brandonli)
HADOOP-10588. Workaround for jetty6 acceptor startup issue. (kihwal)
OPTIMIZATIONS
BUG FIXES

View File

@ -306,9 +306,42 @@ public class HttpServer implements FilterContainer {
return HttpServer.createDefaultChannelConnector();
}
private static class SelectChannelConnectorWithSafeStartup
extends SelectChannelConnector {
public SelectChannelConnectorWithSafeStartup() {
super();
}
/* Override the broken isRunning() method (JETTY-1316). This bug is present
* in 6.1.26. For the versions wihout this bug, it adds insignificant
* overhead.
*/
@Override
public boolean isRunning() {
if (super.isRunning()) {
return true;
}
// We might be hitting JETTY-1316. If the internal state changed from
// STARTING to STARTED in the middle of the check, the above call may
// return false. Check it one more time.
LOG.warn("HttpServer Acceptor: isRunning is false. Rechecking.");
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
// Mark this thread as interrupted. Someone up in the call chain
// might care.
Thread.currentThread().interrupt();
}
boolean runState = super.isRunning();
LOG.warn("HttpServer Acceptor: isRunning is " + runState);
return runState;
}
}
@InterfaceAudience.Private
public static Connector createDefaultChannelConnector() {
SelectChannelConnector ret = new SelectChannelConnector();
SelectChannelConnector ret = new SelectChannelConnectorWithSafeStartup();
ret.setLowResourceMaxIdleTime(10000);
ret.setAcceptQueueSize(128);
ret.setResolveNames(false);

View File

@ -438,9 +438,41 @@ public final class HttpServer2 implements FilterContainer {
return HttpServer2.createDefaultChannelConnector();
}
private static class SelectChannelConnectorWithSafeStartup
extends SelectChannelConnector {
public SelectChannelConnectorWithSafeStartup() {
super();
}
/* Override the broken isRunning() method (JETTY-1316). This bug is present
* in 6.1.26. For the versions wihout this bug, it adds insignificant
* overhead.
*/
@Override
public boolean isRunning() {
if (super.isRunning()) {
return true;
}
// We might be hitting JETTY-1316. If the internal state changed from
// STARTING to STARTED in the middle of the check, the above call may
// return false. Check it one more time.
LOG.warn("HttpServer Acceptor: isRunning is false. Rechecking.");
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
// Mark this thread as interrupted. Someone up in the call chain
// might care.
Thread.currentThread().interrupt();
}
boolean runState = super.isRunning();
LOG.warn("HttpServer Acceptor: isRunning is " + runState);
return runState;
}
}
@InterfaceAudience.Private
public static Connector createDefaultChannelConnector() {
SelectChannelConnector ret = new SelectChannelConnector();
SelectChannelConnector ret = new SelectChannelConnectorWithSafeStartup();
ret.setLowResourceMaxIdleTime(10000);
ret.setAcceptQueueSize(128);
ret.setResolveNames(false);