Producers blocks when global storeUsage is smaller than persistent adapter 
chunk size; should warn of incorrect configuration
-----------------------------------------------------------------------------------------------------------------------------

                 Key: AMQ-2834
                 URL: https://issues.apache.org/activemq/browse/AMQ-2834
             Project: ActiveMQ
          Issue Type: Improvement
          Components: Broker
    Affects Versions: 5.3.2
            Reporter: Reynald Borer
            Priority: Minor


Defining a global {{storeUsage}} parameter that is smaller than the persistent 
adapter chunk size makes all producers blocks as soon as the store is full 
(when producer flow control is enabled). It would be nice if ActiveMQ showed a 
big warning during startup that the used configuration is not correct.

Here is how to reproduce this:
# start the server;
# produce enough persistent messages in order to reach the store limit (by 
using ant producer -Ddurable=true -Dmax=10000); the producer is blocked after N 
messages;
# check the admin web console, store percent used reports 100%; in the logs 
"Usage Manager Store is Full" is reported;
# start a consumer (with ant consumer -Dmax=10000); consumer will consume 
messages and stop at N-1 (!)
# then, even if all messages are consumed, the producer is still blocked (and 
the consumer is of course still waiting); in the web console, the store percent 
used is now way higher than 100%, and no messages are hanging in the queue.

The broker configuration is the following:

{code}
<beans
  xmlns="http://www.springframework.org/schema/beans";
  xmlns:amq="http://activemq.apache.org/schema/core";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core 
http://activemq.apache.org/schema/core/activemq-core.xsd   
  http://activemq.apache.org/camel/schema/spring 
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd";>

    <!-- Allows us to use system properties as variables in this configuration 
file -->
    <bean 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

    <broker xmlns="http://activemq.apache.org/schema/core"; 
brokerName="jmsServer" dataDirectory="${activemq.base}/data" persistent="true">

        <persistenceAdapter>
            <amqPersistenceAdapter directory="${activemq.base}/data" 
maxFileLength="50 mb" syncOnWrite="false"/>
        </persistenceAdapter>

        <!-- The transport connectors ActiveMQ will listen to -->
        <transportConnectors>
            <transportConnector name="openwire" 
uri="tcp://0.0.0.0:61616?keepAlive=true&amp;wireFormat.maxInactivityDuration=1200000&amp;connectionTimeout=1200000&amp;soTimeout=1200000"
 enableStatusMonitor="true"/>
        </transportConnectors>

        <!--  The maximum about of space the broker will use before slowing 
down producers -->
        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="200 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="10 mb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

    </broker>
</beans>
{code}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to