[
https://issues.apache.org/jira/browse/CAMEL-16718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17363751#comment-17363751
]
Morgan L edited comment on CAMEL-16718 at 6/15/21, 4:28 PM:
------------------------------------------------------------
To give you more information about the write error which can lead to this,
debugging indicates that an error in
{{io.netty.channel.AbstractChannel.writeAndFlush}} (or a subclass
implementation) which leads to an invocation of
{{io.netty.channel.AbstractChannel.handleWriteError}} leads to this bug
occuring.
I was able to identify a possible partial cause of the issue, located in
org.apache.camel.component.netty.NettyProducer.processWithConnectedChannel. An
anonymous subclass of ChannelFutureListener is created with a callback that
invokes {{producerCallback.done}} if and only if the associated ChannelFuture
completed successfully. If it failed, {{producerCallback.done}} is not invoked.
In a debugger, manually invoking {{producerCallback.done}} inside that callback
will prevent the route from hanging.
This is about as far as I got.
As for difficulty reproducing this, can you check in your debugger whether
{{AbstractChannel.handleWriteError}} is being invoked?
was (Author: morgan l):
To give you more information about the write error which can lead to this,
debugging indicates that an error in
io.netty.channel.AbstractChannel.writeAndFlush (or a subclass implementation)
which leads to an invocation of
io.netty.channel.AbstractChannel.handleWriteError leads to this bug occuring.
I was able to identify a possible partial cause of the issue, located in
org.apache.camel.component.netty.NettyProducer.processWithConnectedChannel. An
anonymous subclass of ChannelFutureListener is created with a callback that
invokes producerCallback.done if and only if the associated ChannelFuture
completed successfully. If it failed, producerCallback.done is not invoked. In
a debugger, manually invoking producerCallback.done inside that callback will
prevent the route from hanging.
This is about as far as I got.
As for difficulty reproducing this, can you check in your debugger whether
AbstractChannel.handleWriteError is being invoked?
> Conflict with Netty TCP + Resilience4J circuit breaker
> ------------------------------------------------------
>
> Key: CAMEL-16718
> URL: https://issues.apache.org/jira/browse/CAMEL-16718
> Project: Camel
> Issue Type: Bug
> Components: camel-netty
> Affects Versions: 3.7.4, 3.10.0
> Reporter: Morgan L
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 3.11.0
>
> Attachments: sample-camel - broketcpserver.log.txt, sample-camel -
> nettytest.log.txt, sample-camel.zip
>
>
> My team has found what we believe is a conflict between the Netty TCP
> producer and the Resilience4J circuit breaker, under specific circumstances.
> When the Netty TCP client encounters an error while writing to the server
> (for us, usually a broken pipe exception), if it is inside a circuit breaker,
> the route will hang indefinitely.
> Discussion on Zulip: [Conflict with Netty TCP + Resilience4J circuit
> breaker|https://camel.zulipchat.com/#narrow/stream/257298-camel/topic/Conflict.20with.20Netty.20TCP.20.2B.20Resilience4J.20circuit.20breaker]
> A zipped version of the complete test project is attached. It should allow
> you to reproduce the issue.
> By running BrokeTCPServer.main(), and then invoking
> NettyTest.testNettyCircuitBreaker(), you should see that of the two messages
> we push into the queue, only one is processed. Only one connection is
> initiated to the BrokeTCPServer.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)