activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jaewoong Choi (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AMQ-4666) Topic persistent message publishing is blocked by hitting 100% of per-destination memory limit if there's any durable subscriber connected but not consuming.
Date Fri, 02 Aug 2013 22:03:49 GMT
Jaewoong Choi created AMQ-4666:
----------------------------------

             Summary: Topic persistent message publishing is blocked by hitting 100% of per-destination
memory limit if there's any durable subscriber connected but not consuming.
                 Key: AMQ-4666
                 URL: https://issues.apache.org/jira/browse/AMQ-4666
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.7.0
            Reporter: Jaewoong Choi


Failing scenario:

1. Embedded broker starts with the following configurations:
   - persistent = true,
   - systemUsage.memoryUsage.limit = 10*1024*1024 // 10mb broker main memory limit
   - destinationPolicy.policyEntry.memoryLimit = 1*1024*1024 // 1mb per-destination memory
limit
2. Create a topic durable subscription with prefetchLimit=0.
3. Create a topic publisher and publish persistent 400kb messages.
4. (Problem) After publishing 3 messages successfully, PFC kicks in and the above topic publisher
gets blocked its publishing.

At step #4, the expectation is not seeing any publisher blocking for the persistent message
publishing until the store limit is reached.  How come the persistent message publishing is
limited by 100% memory full?

Per the code inspection, this is because the store cursor of the topic durable subscriber
(i.e. TopicStorePrefetch) is working with the main broker's memory limit, not with the per-destination
memory limit.  Hence, it keeps increasing broker main memory usage over the per-destination
memory limit and after it reached 100% of per-destination limit, PFC kicked in.

I verified that the above scenario went through well if I fix the store cursor to use/refer-to
the per-destination memory usage along with its pending list (cache) management.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message