You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2009/10/06 16:39:33 UTC

svn commit: r822295 - in /activemq/trunk/activemq-core/src: main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java test/resources/org/apache/activemq/util/plugin-broker.xml

Author: dejanb
Date: Tue Oct  6 14:39:27 2009
New Revision: 822295

URL: http://svn.apache.org/viewvc?rev=822295&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQ-2441 - timestampbroker fix

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java
    activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/util/plugin-broker.xml

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java?rev=822295&r1=822294&r2=822295&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java Tue Oct  6 14:39:27 2009
@@ -58,6 +58,12 @@
     * the expiration date (in Milliseconds).  
     */
     long ttlCeiling = 0;
+    
+    /**
+     * If true, the plugin will not update timestamp to past values
+     * False by default
+     */
+    boolean futureOnly = false;
 
     /** 
     * setter method for zeroExpirationOverride
@@ -75,13 +81,16 @@
         this.ttlCeiling = ttlCeiling;
     }
 
-    public void send(ProducerBrokerExchange producerExchange, Message message) throws Exception {
+	public void setFutureOnly(boolean futureOnly) {
+		this.futureOnly = futureOnly;
+	}
+
+	public void send(ProducerBrokerExchange producerExchange, Message message) throws Exception {
         if (message.getTimestamp() > 0
             && (message.getBrokerPath() == null || message.getBrokerPath().length == 0)) {
             // timestamp not been disabled and has not passed through a network
             long oldExpiration = message.getExpiration();
             long newTimeStamp = System.currentTimeMillis();
-            message.setTimestamp(newTimeStamp);
             long timeToLive = zeroExpirationOverride;
             if (oldExpiration > 0) {
                 long oldTimestamp = message.getTimestamp();
@@ -91,9 +100,13 @@
                 timeToLive = ttlCeiling;
             }
             long expiration = timeToLive + newTimeStamp;
-            if (timeToLive > 0 && expiration > 0) {
-                message.setExpiration(expiration);
-            }
+			//In the scenario that the Broker is behind the clients we never want to set the Timestamp and Expiration in the past 
+			if(!futureOnly || (expiration > oldExpiration)) {
+				if (timeToLive > 0 && expiration > 0) {
+					message.setExpiration(expiration);
+				}
+				message.setTimestamp(newTimeStamp);
+			}
         }
         super.send(producerExchange, message);
     }

Modified: activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/util/plugin-broker.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/util/plugin-broker.xml?rev=822295&r1=822294&r2=822295&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/util/plugin-broker.xml (original)
+++ activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/util/plugin-broker.xml Tue Oct  6 14:39:27 2009
@@ -28,7 +28,7 @@
       <!-- lets enable detailed logging in the broker but ignore ConnectionEvents -->
       <loggingBrokerPlugin logAll="true" logConnectionEvents="false"/>
       
-      <timeStampingBrokerPlugin zeroExpirationOverride="1000" ttlCeiling="60000"/>
+      <timeStampingBrokerPlugin zeroExpirationOverride="1000" ttlCeiling="60000" futureOnly="true"/>
       
       <traceBrokerPathPlugin/>