consumeAll: fail content with static exception except when debug logs are enabled + move exception management from HttpInput to ContentProducer
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
This commit is contained in:
parent
78dc11b648
commit
973dfcf4f7
|
@ -30,6 +30,14 @@ import org.slf4j.LoggerFactory;
|
||||||
class AsyncContentProducer implements ContentProducer
|
class AsyncContentProducer implements ContentProducer
|
||||||
{
|
{
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(AsyncContentProducer.class);
|
private static final Logger LOG = LoggerFactory.getLogger(AsyncContentProducer.class);
|
||||||
|
private static final Throwable UNCONSUMED_CONTENT_EXCEPTION = new IOException("Unconsumed content")
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public synchronized Throwable fillInStackTrace()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private final AutoLock _lock = new AutoLock();
|
private final AutoLock _lock = new AutoLock();
|
||||||
private final HttpChannel _httpChannel;
|
private final HttpChannel _httpChannel;
|
||||||
|
@ -151,11 +159,15 @@ class AsyncContentProducer implements ContentProducer
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean consumeAll(Throwable x)
|
public boolean consumeAll()
|
||||||
{
|
{
|
||||||
assertLocked();
|
assertLocked();
|
||||||
|
Throwable x = UNCONSUMED_CONTENT_EXCEPTION;
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("consumeAll [e={}] {}", x, this);
|
{
|
||||||
|
x = new IOException("Unconsumed content");
|
||||||
|
LOG.debug("consumeAll {}", this, x);
|
||||||
|
}
|
||||||
failCurrentContent(x);
|
failCurrentContent(x);
|
||||||
// A specific HttpChannel mechanism must be used as the following code
|
// A specific HttpChannel mechanism must be used as the following code
|
||||||
// does not guarantee that the channel will synchronously deliver all
|
// does not guarantee that the channel will synchronously deliver all
|
||||||
|
|
|
@ -80,9 +80,9 @@ class BlockingContentProducer implements ContentProducer
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean consumeAll(Throwable x)
|
public boolean consumeAll()
|
||||||
{
|
{
|
||||||
boolean eof = _asyncContentProducer.consumeAll(x);
|
boolean eof = _asyncContentProducer.consumeAll();
|
||||||
_semaphore.release();
|
_semaphore.release();
|
||||||
return eof;
|
return eof;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ public interface ContentProducer
|
||||||
* Doesn't change state.
|
* Doesn't change state.
|
||||||
* @return true if EOF was reached.
|
* @return true if EOF was reached.
|
||||||
*/
|
*/
|
||||||
boolean consumeAll(Throwable x);
|
boolean consumeAll();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the current data rate consumption is above the minimal rate.
|
* Check if the current data rate consumption is above the minimal rate.
|
||||||
|
|
|
@ -150,10 +150,9 @@ public class HttpInput extends ServletInputStream implements Runnable
|
||||||
{
|
{
|
||||||
try (AutoLock lock = _contentProducer.lock())
|
try (AutoLock lock = _contentProducer.lock())
|
||||||
{
|
{
|
||||||
IOException failure = new IOException("Unconsumed content");
|
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("consumeAll {}", this, failure);
|
LOG.debug("consumeAll {}", this);
|
||||||
boolean atEof = _contentProducer.consumeAll(failure);
|
boolean atEof = _contentProducer.consumeAll();
|
||||||
if (atEof)
|
if (atEof)
|
||||||
_consumedEof = true;
|
_consumedEof = true;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue