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/>