Author: cmacnaug
Date: Tue Sep 22 21:12:49 2009
New Revision: 817842

URL: http://svn.apache.org/viewvc?rev=817842&view=rev
Log:
Changing memory limit flow control warning messages to be one time messages 
[http://issues.apache.org/activemq/browse/AMQ-2401]

This avoids performance penalty of constant logging since under normal 
circumstance producers will be going in and out of flow control frequently. 

Modified:
    
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java
    
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
    
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java

Modified: 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java
URL: 
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java?rev=817842&r1=817841&r2=817842&view=diff
==============================================================================
--- 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java
 (original)
+++ 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/BaseDestination.java
 Tue Sep 22 21:12:49 2009
@@ -51,6 +51,7 @@
     protected SystemUsage systemUsage;
     protected MemoryUsage memoryUsage;
     private boolean producerFlowControl = false;
+    protected boolean warnOnProducerFlowControl = true; 
     private int maxProducersToAudit = 1024;
     private int maxAuditDepth = 2048;
     private boolean enableAudit = true;

Modified: 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
URL: 
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java?rev=817842&r1=817841&r2=817842&view=diff
==============================================================================
--- 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
 (original)
+++ 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
 Tue Sep 22 21:12:49 2009
@@ -412,11 +412,15 @@
             isFull(context, memoryUsage);
             fastProducer(context, producerInfo);
             if (isProducerFlowControl() && context.isProducerFlowControl()) {
-                final String logMessage = "Usage Manager memory limit reached. 
Stopping producer (" + message.getProducerId() + ") to prevent flooding " + 
getActiveMQDestination().getQualifiedName() + "." +
-                        " See 
http://activemq.apache.org/producer-flow-control.html for more info";
-                LOG.info(logMessage);
+                if(warnOnProducerFlowControl) {
+                    warnOnProducerFlowControl = false;
+                    LOG.info("Usage Manager memory limit reached on " 
+getActiveMQDestination().getQualifiedName() + ". Producers will be throttled 
to the rate at which messages are removed from this destination to prevent 
flooding it." +
+                            " See 
http://activemq.apache.org/producer-flow-control.html for more info");
+                }
+                
                 if (systemUsage.isSendFailIfNoSpace()) {
-                    throw new 
javax.jms.ResourceAllocationException("SystemUsage memory limit reached");
+                    throw new javax.jms.ResourceAllocationException("Usage 
Manager memory limit reached. Stopping producer (" + message.getProducerId() + 
") to prevent flooding " +getActiveMQDestination().getQualifiedName() + "." +
+                            " See 
http://activemq.apache.org/producer-flow-control.html for more info");
                 }
     
                 // We can avoid blocking due to low usage if the producer is 
sending

Modified: 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
URL: 
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java?rev=817842&r1=817841&r2=817842&view=diff
==============================================================================
--- 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
 (original)
+++ 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
 Tue Sep 22 21:12:49 2009
@@ -280,14 +280,20 @@
         if(memoryUsage.isFull()) {
             isFull(context, memoryUsage);
             fastProducer(context, producerInfo);
+            
             if (isProducerFlowControl() && context.isProducerFlowControl()) {
-                final String logMessage = "Usage Manager memory limit reached. 
Stopping producer (" + message.getProducerId() + ") to prevent flooding " 
+getActiveMQDestination().getQualifiedName() + "." +
-                        " See 
http://activemq.apache.org/producer-flow-control.html for more info";
-                LOG.info(logMessage);
+                
+                if(warnOnProducerFlowControl) {
+                    warnOnProducerFlowControl = false;
+                    LOG.info("Usage Manager memory limit reached for " 
+getActiveMQDestination().getQualifiedName() + ". Producers will be throttled 
to the rate at which messages are removed from this destination to prevent 
flooding it." +
+                            " See 
http://activemq.apache.org/producer-flow-control.html for more info");
+                }
+                
                 if (systemUsage.isSendFailIfNoSpace()) {
-                    throw new 
javax.jms.ResourceAllocationException(logMessage);
+                    throw new javax.jms.ResourceAllocationException("Usage 
Manager memory limit reached. Stopping producer (" + message.getProducerId() + 
") to prevent flooding " +getActiveMQDestination().getQualifiedName() + "." +
+                            " See 
http://activemq.apache.org/producer-flow-control.html for more info");
                 }
-    
+   
                 // We can avoid blocking due to low usage if the producer is 
sending
                 // a sync message or
                 // if it is using a producer window


Reply via email to