[ 
https://issues.apache.org/jira/browse/QPID-7987?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16858431#comment-16858431
 ] 

Alex Rudyy commented on QPID-7987:
----------------------------------

Hi Utkarsh,
Thanks for volunteering for the task.

Unfortunately, I did not put much details for the problem into JIRA description 
and cannot recollect what exactly was happening . I tried to reproduce the 
problem as  suggested in my earlier comment, but, that did not replicate the 
issue so far.

The Qpid Broker utilizes direct memory for keeping message content/headers. The 
direct memory is managed via {{QpidByteBuffer}} objects which are the wrappers 
around java {{ByteBuffer}}. They have a reference counter mechanism. Every time 
when buffer is duplicated, sliced, or any other operation invoked resulting in 
creation of new {{QpidByteBuffer}} instance from the original one, the 
reference counter is incremented. When duplicate/slice/view is disposed the 
reference counter is decremented. When counter reaches 0, the pooled byte 
buffer is returned into pool, otherwise, the instance of {{QpidByteBuffer}} is 
garbage collected eventually.

Method {{QpidByteBuffer#dispose()}} has to be invoked every time when  
{{QpidByteBuffer}} instance is not needed any more. If {{dispose}} is not 
invoked, that can result in leakage of {{QpidByteBuffer}}s . 

This JIRA was raised to track a race condition  when {{transaction}} is idle or 
inactive for some time (The application does not commit/rollback the 
transaction for a while). It seems when AMQP 0-10 session is closed by 
transaction timeout functionality and a new message is arriving at the same 
time, there is a possibility for a race when incoming message 
{{QpidByteBuffer}}s are not disposed. As result, the {{QpidByteBuffer}} leak 
can occur.

Taking that the issue occurrence frequency was quite rear and 0-10 is a legacy 
protocol, the issue was not addressed promptly. Since than, some changes had 
been made in {{transaction timeout}} functionality which is currently closing 
impacted connection rather than session (for consistency reasons). It looks 
like that those changes might prevented the issue from occurrence in my 
reproduction attempts.

I will try to reproduce the problem again later. If I will not manage to do it, 
I will close the JIRA with "Cannot reproduce".

Potentially, you can try to replicate the issue by writing a test which can 
send the messages when transaction timeout functionality is closing underlying 
connection. You can follow existing integration tests 
[TransactionTimeoutTest|https://github.com/apache/qpid-broker-j/blob/master/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/transactiontimeout/TransactionTimeoutTest.java].
 It is going to be tricky to catch the moment...



> [Qpid Broker-J][AMQP 0-10] QpidByteBuffer can leak when local transaction 
> open/idle time exceeds the maximum open/idle timeout causing session close 
> but a new message arrives at the same time when session is in process of close
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-7987
>                 URL: https://issues.apache.org/jira/browse/QPID-7987
>             Project: Qpid
>          Issue Type: Bug
>          Components: Broker-J
>    Affects Versions: qpid-java-6.1.4, qpid-java-broker-7.0.0, qpid-java-6.1.5
>            Reporter: Alex Rudyy
>            Priority: Major
>         Attachments: 0002-instrumentation.patch
>
>
> {{QpidByteBuffer}} can leak when broker operates with configured open and 
> idle transaction close timeouts ( 
> {{virtualhost.storeTransactionOpenTimeoutClose}} or/and 
> {{virtualhost.storeTransactionIdleTimeoutClose}}) and the transaction timeout 
> occurs  causing the Broker to close the underlying session but at the same 
> time a new message arrives. The new message {{QpidByteBuffer}} might not be 
> disposed.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to