Fixed incorrect exception handling
This commit is contained in:
parent
d2b6078eaa
commit
212be9327d
@ -55,7 +55,7 @@ class HttpTunnelingChannelHandler extends SimpleChannelUpstreamHandler {
|
|||||||
|
|
||||||
private static final InternalLogger logger = InternalLoggerFactory.getInstance(HttpTunnelingChannelHandler.class);
|
private static final InternalLogger logger = InternalLoggerFactory.getInstance(HttpTunnelingChannelHandler.class);
|
||||||
|
|
||||||
List<MessageEvent> awaitingEvents = new ArrayList<MessageEvent>();
|
private final List<MessageEvent> awaitingEvents = new ArrayList<MessageEvent>();
|
||||||
|
|
||||||
private final Lock reconnectLock = new ReentrantLock();
|
private final Lock reconnectLock = new ReentrantLock();
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ class HttpTunnelingChannelHandler extends SimpleChannelUpstreamHandler {
|
|||||||
ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
|
ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
|
||||||
if (stream) {
|
if (stream) {
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
Throwable cause = null;
|
Exception cause = null;
|
||||||
byte[] b = null;
|
byte[] b = null;
|
||||||
reconnectLock.lock();
|
reconnectLock.lock();
|
||||||
try {
|
try {
|
||||||
@ -99,17 +99,17 @@ class HttpTunnelingChannelHandler extends SimpleChannelUpstreamHandler {
|
|||||||
outputStream.write(b);
|
outputStream.write(b);
|
||||||
outputStream.flush();
|
outputStream.flush();
|
||||||
success = true;
|
success = true;
|
||||||
} catch (Throwable t) {
|
} catch (Exception ex) {
|
||||||
success = false;
|
success = false;
|
||||||
cause = t;
|
cause = ex;
|
||||||
if (awaitReconnect()) {
|
if (awaitReconnect()) {
|
||||||
try {
|
try {
|
||||||
outputStream.write(b);
|
outputStream.write(b);
|
||||||
outputStream.flush();
|
outputStream.flush();
|
||||||
success = true;
|
success = true;
|
||||||
} catch (Throwable t2) {
|
} catch (Exception ex2) {
|
||||||
success = false;
|
success = false;
|
||||||
cause = t2;
|
cause = ex2;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (invalidated.compareAndSet(false, true)) {
|
if (invalidated.compareAndSet(false, true)) {
|
||||||
@ -119,11 +119,8 @@ class HttpTunnelingChannelHandler extends SimpleChannelUpstreamHandler {
|
|||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
reconnectLock.unlock();
|
reconnectLock.unlock();
|
||||||
if (success) {
|
if (!success) {
|
||||||
e.getFuture().setSuccess();
|
throw cause;
|
||||||
} else {
|
|
||||||
assert cause != null;
|
|
||||||
e.getFuture().setFailure(cause);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -155,7 +152,7 @@ class HttpTunnelingChannelHandler extends SimpleChannelUpstreamHandler {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setOutputStream(ServletOutputStream outputStream) {
|
void setOutputStream(ServletOutputStream outputStream) throws IOException {
|
||||||
reconnectLock.lock();
|
reconnectLock.lock();
|
||||||
try {
|
try {
|
||||||
this.outputStream = outputStream;
|
this.outputStream = outputStream;
|
||||||
@ -164,14 +161,8 @@ class HttpTunnelingChannelHandler extends SimpleChannelUpstreamHandler {
|
|||||||
ChannelBuffer buffer = (ChannelBuffer) awaitingEvent.getMessage();
|
ChannelBuffer buffer = (ChannelBuffer) awaitingEvent.getMessage();
|
||||||
byte[] b = new byte[buffer.readableBytes()];
|
byte[] b = new byte[buffer.readableBytes()];
|
||||||
buffer.readBytes(b);
|
buffer.readBytes(b);
|
||||||
try {
|
outputStream.write(b);
|
||||||
outputStream.write(b);
|
outputStream.flush();
|
||||||
outputStream.flush();
|
|
||||||
awaitingEvent.getFuture().setSuccess();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
awaitingEvent.getFuture().setFailure(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
reconnectCondition.signalAll();
|
reconnectCondition.signalAll();
|
||||||
}
|
}
|
||||||
|
@ -58,10 +58,23 @@ public class HttpTunnelingServlet extends HttpServlet {
|
|||||||
Channel channel = (Channel) session.getAttribute(CHANNEL_PROP);
|
Channel channel = (Channel) session.getAttribute(CHANNEL_PROP);
|
||||||
HttpTunnelingChannelHandler handler =
|
HttpTunnelingChannelHandler handler =
|
||||||
(HttpTunnelingChannelHandler) session.getAttribute(HANDLER_PROP);
|
(HttpTunnelingChannelHandler) session.getAttribute(HANDLER_PROP);
|
||||||
if (handler.isStreaming()) {
|
try {
|
||||||
streamResponse(request, response, session, handler, channel);
|
if (handler.isStreaming()) {
|
||||||
} else {
|
streamResponse(request, response, session, handler, channel);
|
||||||
pollResponse(channel, request, response, session, handler);
|
} else {
|
||||||
|
pollResponse(channel, request, response, session, handler);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
request.getInputStream().close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Ignore.
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
response.getOutputStream().close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Ignore.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user