You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Michal Kubricht (JIRA)" <ji...@apache.org> on 2015/06/24 15:31:05 UTC

[jira] [Commented] (AMQ-5716) TopicSubscription gets into endless loop when memory limit reached

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

Michal Kubricht commented on AMQ-5716:
--------------------------------------

I agree with your proposal, it is better for sure.

Is there any progress with review or resolving the issue?
I would appreciate it very much. Fix would be motivation to upgrade to newer version.

> TopicSubscription gets into endless loop when memory limit reached
> ------------------------------------------------------------------
>
>                 Key: AMQ-5716
>                 URL: https://issues.apache.org/jira/browse/AMQ-5716
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.7.0, 5.10.2, 5.11.1
>         Environment: JDK-1.6.0_38
>            Reporter: Michal Kubricht
>         Attachments: TopicSubscriptionTest.java, fix_amq_5716.patch, junit_amq_5716.patch
>
>
> I might be wrong, but I think that there is a mistake in {{FilePendingMessageCursor}} in method {{isFull}}.
> The logic implemented in code is:
>  -- isFull returns true when any of "memory usage is full" or "temp usage is full".
> From my point of view this is a mistake and logic should be:
>  -- isFull returns true only when both of "memory usage" and "temp usage" are full.
> The reason why should this be fixed lies in the impact that this mistake caused us in our project:
> TopicSubscription got into endless loop in method {{add(MessageReference)}} when sending message into topic and memory limit reached 100% (it passed 100% in our case, but this is complete different story). Following conditions were fulfilled:
>  * the dispatched queue reached consumer prefetch size,
>  * producer flow control was disabled,
>  * and finally related pending message cursor was full (because of memory usage).
> The temporary storage remained at 0%, it wasn't created at all.
> I understand what is the loop good for, it waits until there is a space in pending message cursor. This is a correct behavior. Anyway, when topic uses {{FilePendingMessageCursor}}, it loops for no good reason, because the cursor itself can handle the situation when memory limit is reached/full. It dumps all messages from memory list into disk list into temporary storage.
> I am providing a patch file for this fix and very basic JUnit test for it, if this is acknowledged as bug and its solution.
> Third file is a JUnit test is not considered to be part of commit (it never ends without any fix provided), but shows as simple as possible the topic subscription stuck scenario.
> If the cursor would return isFull as false, it would solve described situation. It is sure that I cannot know or even guess that this implementation of {{FilePendingMessageCursor}} is there for some other reason, so please take this only as my personal recommendation after some time spent on analysis of problem in our project.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)