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

David Sitsky updated AMQ-7085:
------------------------------
    Attachment:     (was: AMQ-7085.patch)

> Queue.start() does not call systemUsage.start() so TempStore usage is not 
> handled correctly
> -------------------------------------------------------------------------------------------
>
>                 Key: AMQ-7085
>                 URL: https://issues.apache.org/jira/browse/AMQ-7085
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.15.6
>            Reporter: David Sitsky
>            Priority: Major
>         Attachments: amq-7085.patch
>
>
> I have an application using ActiveMQ and have a situation where a producer is 
> blocked with this log message due to the temp usage limit being hit:
> {noformat}
> [ActiveMQ Transport: tcp:///aaa.bbb.ccc.ddd:65119@64759] 82567721 INFO  
> org.apache.activemq.broker.region.Queue - 
> Usage(Main:temp:queue://aaabbb:temp) percentUsage=99%, usage=61771109932, 
> limit=61771104256, percentUsageMinDelta=1%;Parent:Usage(Main:temp) 
> percentUsage=100%, usage=61771109932, limit=61771104256, 
> percentUsageMinDelta=1%: Temp Store is Full (99% of 61771104256). Stopping 
> producer (ID:aaaaa-3:1:1:1) to prevent flooding queue://aaabbb. See 
> http://activemq.apache.org/producer-flow-control.html for more info (blocking 
> for: 8512s){noformat}
> In the past I have been able to use JConsole and update the broker's 
> TempLimit value to a higher value to allow things to continue.
>  
> However on this occasion, the messages above when output again show that the 
> parent's temp limit has updated however the child's limit (the queue) is 
> unchanged.  So it seems the broker's TempUsage does not know about the 
> queue's TempUsage. 
>  
> In looking at the code.. it seems a child Usage class has to call start() in 
> order for this parent -> children link to be established and for parent limit 
> changes to be propagated down to children.  However the Queue start() method 
> doesn't call systemUsage.getTempUsage().start() for some reason (or even just 
> systemUsage.start()).
>  
> Is this a bug?
>  
> DestinationView sadly does not expose setTempLimit() either so this wasn't an 
> option either.
>  
> From Queue:
> {code:java}
>     @Override
>     public void start() throws Exception {
>         if (started.compareAndSet(false, true)) {
>             if (memoryUsage != null) {
>                 memoryUsage.start();
>             }
>             if (systemUsage.getStoreUsage() != null) {
>                 systemUsage.getStoreUsage().start();
>             }
>             systemUsage.getMemoryUsage().addUsageListener(this);
>             messages.start();
>             if (getExpireMessagesPeriod() > 0) {
>                 scheduler.executePeriodically(expireMessagesTask, 
> getExpireMessagesPeriod());
>             }
>             doPageIn(false);
>         }
>     }{code}
>    



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

Reply via email to