Hi Claus,

I understand what you mean that an exception could fill up the logs.  If
you look at apache tomcat they are taking the approach of halting
processing with an exception[1].  That is probably why I thought that
might be appropriate.  I was originally thinking for the exception
approach we could do this:

        DecoderResult decoderResult = request.decoderResult();

        if(decoderResult != null  && decoderResult.cause() != null) {
            LOG.error("Netty Request Decoder Failure: {}",
decoderResult.cause().getMessage());
            HttpResponse response = new DefaultHttpResponse(HTTP_1_1,
BAD_REQUEST);
            response.headers().set(Exchange.CONTENT_TYPE, "text/plain");
            response.headers().set(Exchange.CONTENT_LENGTH, 0);
            ctx.writeAndFlush(response);
            ctx.channel().close();
            throw new CamelException(decoderResult.cause());
        }


The logging approach could simply be paired back:

       DecoderResult decoderResult = request.decoderResult();

        if(decoderResult != null  && decoderResult.cause() != null) {
            LOG.error("Netty Request Decoder Failure: {}",
decoderResult.cause().getMessage());
        }

Will leave this open a few days to see if there are any other opinions. 
Either approach I think is an improvement.  I've created a JIRA
https://issues.apache.org/jira/browse/CAMEL-14195

Thanks!

- Bob

[1]
https://github.com/apache/tomcat/blob/f4e7cdcff5abc239866e1d69906086cf1bae78ad/java/org/apache/coyote/http11/Http11InputBuffer.java


On 2019/11/20 04:15:54, Claus Ibsen <c...@gmail.com> wrote:
> Hi Bob>
>
> Yeah we can make better logging, not sure if throwing an exception is>
> the right course as then your server logs can get spammed if http>
> clients send data with long headers.>
> So maybe there should be an option to set the logging level etc.>
>
> You are welcome to create a JIRA and work on a PR>
> https://camel.apache.org/manual/latest/contributing.html>
>
> On Tue, Nov 19, 2019 at 9:39 PM Bob Paulin <bo...@bobpaulin.com> wrote:>
> >>
> > Hi,>
> >>
> > When the Camel Netty Http component receives a header that exceeds
it's>
> > maxHeaderSize the>
> >
org.apache.camel.component.netty.http.handlers.HttpServerChannelHandler>
> > simply logs that a message was received at DEBUG level:>
> >>
> > 2019-11-19T19:34:02,418 | DEBUG | Camel (camel-2) thread #189 ->
> > NettyEventExecutorGroup | NettyHttpConsumer | 95 ->
> > org.apache.camel.camel-core - 2.22.3 | Message received:>
> > HttpObjectAggregator$AggregatedFullHttpRequest(decodeResult:>
> > failure(io.netty.handler.codec.TooLongFrameException: HTTP header is>
> > larger than 8192 bytes.), version: HTTP/1.1, content: EmptyByteBufBE)>
> >>
> > This the request is allowed to proceed to code upstream which>
> > unfortunately leads the developer to believe that there is nothing
wrong>
> > with the request. In my case the request failed when I went to>
> > unmarshal the body which was unexpectedly empty. I'd like to propose>
> > one of the follow options:>
> >>
> > 1) Throw an exception>
> >>
> > 2) Log an Error>
> >>
> > Both of the above would be possible if with some changes to the>
> > HttpServerChannelHandler.channelRead0>
> >>
> > Currently the code only performs the following.>
> >>
> > LOG.debug("Message received: {}", request);>
> >>
> > However there could be a check on the request.decoderResult().cause();>
> > If this is not null we could just throw the exception or a minimum log>
> > an error level. My preference would be to throw an exception as this>
> > will make unrecoverable failures more obvious to developers. Let me>
> > know if this direction works for the team. Happy to help with a>
> > patch/tests.>
> >>
> > Sincerely,>
> >>
> > Bob>
> >>
> >>
>
>
> -- >
> Claus Ibsen>
> ----------------->
> http://davsclaus.com @davsclaus>
> Camel in Action 2: https://www.manning.com/ibsen2>
>

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to