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

Reply via email to