[rabbitmq-discuss] Rabbitmq 2.5-2.6.1 java hanging on close of connection
Simon MacMullen
simon at rabbitmq.com
Mon Nov 21 13:07:10 GMT 2011
Hi Benjamin.
In general we do accept patches, although due to our Corporate Overlords
you would have to sign a contributor agreement.
I would be reluctant to merge such a patch though, since:
* It's to work around a server bug which will be fixed in the next release
* This bug has been around for most of a year without attracting much
attention
* Option 1) is ugly; option 2) is (somewhat) complicated.
BTW, I got a reply from the spring-amqp maintainer, Dave Syer:
> Spring AMQP doesn't explicitly invoke close() in different threads.
> There's nothing to stop it happening (as is the case with the Java
> client itself I suppose), but we actually hardly ever call
> Channel.close() so it is pretty unlikely. I would be interested to
> hear of a way to tickle a normal app into this behaviour.
So I still wonder if the threading thing is something you are doing in
your app.
Cheers, Simon
On 17/11/11 18:12, Benjamin Bennett wrote:
> Had a question if no one is working on patch for the java client do
> accept external patches?
>
> I was going to either change it to the following .
>
> 1) Remove the infinite wait on a connection close.
>
> Or
>
> Place a BlockingQueue on the channel closes during the close call.
>
> The sychronize on the BlockingQueue for the connection close , of
> which it cannot close the connection if a channel is currently be
> closed.
>
> The second is more code but it would keep the infinity timeout in
> place will working around the deadlock issue.
>
> It would save a lot of pain if people are using 2.7.1 and below.
>
> On Mon, Nov 14, 2011 at 5:21 PM, Benjamin Bennett<benbennett at gmail.com> wrote:
>> I am using the spring amqp lib and it is doing the connection closing when
>> the spring context is closed. I do not think it has a property to inject the
>> hack. Also if you know any of the spring amqp devs. Having you telling them
>> to check to make sure it is doing the way you have described will have much
>> more authority than me.
>>
>> I will probably hack the spring amqp lib for now
>>
>> On Nov 14, 2011 12:32 PM, "Simon MacMullen"<simon at rabbitmq.com> wrote:
>>>
>>> On 14/11/11 16:15, Benjamin Bennett wrote:
>>>>
>>>> Here is report from rabbitmqctrl report
>>>> http://pastebin.com/MSwv82C3
>>>
>>> Ah, thank you. After some poking, that genuinely looks like a server bug.
>>> Damn.
>>>
>>> In order for it to happen you need the last channel close / close_ok to
>>> overlap with the connection close / close_ok. With the Java client you have
>>> to invoke Channel.close() and Connection.close() from different threads to
>>> get this to happen, and still be unlucky.
>>>
>>> You should be allowed to do this, but right now it's racy.
>>>
>>>> I was going to attempt to put a timeout on the connection close method
>>>> but that really would be a hack.
>>>
>>> Indeed! Other slightly less hacky workarounds until we get this fixed:
>>>
>>> * Invoke Channel.close() and Connection.close() from the same thread, or
>>> otherwise ensure they don't overlap.
>>>
>>> * Don't invoke Channel.close() if you know you're going to invoke
>>> Connection.close() anyway.
>>>
>>> Cheers, Simon
>>>
>>> --
>>> Simon MacMullen
>>> RabbitMQ, VMware
>>> _______________________________________________
>>> rabbitmq-discuss mailing list
>>> rabbitmq-discuss at lists.rabbitmq.com
>>> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>>
--
Simon MacMullen
RabbitMQ, VMware
More information about the rabbitmq-discuss
mailing list