qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robbie Gemmell (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (QPID-3157) 'removed' subscriptions may be held in memory by the queues SubscriptionList or 'lastSubscriptionNode' reference
Date Sun, 31 Jul 2011 21:05:09 GMT

     [ https://issues.apache.org/jira/browse/QPID-3157?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Robbie Gemmell reassigned QPID-3157:
------------------------------------

    Assignee: Keith Wall  (was: Robbie Gemmell)

Added a test to pick up the problem, then fixed up the issue, which was: the marker cleanup
could run off the end of the list if the previously-tail node was being removed, and so would
end up pointing a dummy marker nodes 'next' reference at null instead of the new list tail,
meaning it then wouldnt pick up future Subscriptions added to the list, which would cause
the queue to cycle back to the list head preumaturely.

Back over to you Keith.

> 'removed' subscriptions may be held in memory by the queues SubscriptionList or 'lastSubscriptionNode'
reference
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-3157
>                 URL: https://issues.apache.org/jira/browse/QPID-3157
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: 0.5, 0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12
>            Reporter: Robbie Gemmell
>            Assignee: Keith Wall
>            Priority: Critical
>             Fix For: 0.13
>
>
> subscriptions 'removed' from a queue subscription list are only marked deleted and can
not actually bereleased from memory until the head of the subscription list advances beyond
them. Additionally and perhaps more troublesome, a queues 'lastSubscriptionNode' can refer
to a particular subscription but hold *all* subscequent subscriptions in memory whether they
have been deleted or not and regardless whether the head of the SubscriptionList has advanced
beyond them,
> As a result any memory in use by the now-closed subscription will not be released until
the queue is deleted, or all the subscriptions prior to it are closed and removed from the
list *and* the 'lastSubscriptionNode' advances beyond them.. This also holds the associated
ServerSession in memory, which is currently a rather heavyweight object.
> This issue is further compounded when the queue has a backlog of messages and consumers
are then created, used to recieve one message, and closed. In this scenario the broker sends
the client as many messages as it can prefetch, leading to creation of up to <prefetch
size, default=500> MessageTransfer commands, all which are recorded in the ServerSession
but then left retained as 'unprocessed' in the closed session, which might be held in memory
as described above. This results in an explosion in the number of MessageTransfer commands
retained in memory as each message can have up to <prefetch size> MessageTransfer commands
associated with it before it is eventually consumed by a client and all of thse will also
be retained in memory by a 'removed' but not deleted subscription. The last effect can be
combated by restricting the preftech size (eg appending &maxprefetch='1' to the connection
url).

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


Mime
View raw message