This is an automated email from the ASF dual-hosted git repository.
michaelpearce pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-nms-amqp.git
The following commit(s) were added to refs/heads/master by this push:
new 62bcdb1 AMQNET-607: It should be possible to reset AbsoluteExpiryTime
new b606b62 Merge pull request #22 from Havret/reset_absolute_expiry_time
62bcdb1 is described below
commit 62bcdb11c85e03f0ea6e12c58593591dde7d30c8
Author: Havret <[email protected]>
AuthorDate: Mon Aug 26 22:37:15 2019 +0200
AMQNET-607: It should be possible to reset AbsoluteExpiryTime
---
src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs | 2 +-
src/NMS.AMQP/Message/NmsMessage.cs | 4 ++--
src/NMS.AMQP/NmsSession.cs | 7 ++-----
.../Provider/Amqp/Message/AmqpNmsMessageFacade.cs | 20 +++++++++++---------
.../Message/Facade/NmsTestMessageFacade.cs | 2 +-
.../Provider/Amqp/AmqpNmsMessageFacadeTest.cs | 13 +++++++------
6 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
b/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
index f610a6f..4b855ff 100644
--- a/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
+++ b/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
@@ -37,7 +37,7 @@ namespace Apache.NMS.AMQP.Message.Facade
string NMSType { get; set; }
string GroupId { get; set; }
uint GroupSequence { get; set; }
- DateTime Expiration { get; set; }
+ DateTime? Expiration { get; set; }
sbyte JmsMsgType { get; }
/// <summary>
diff --git a/src/NMS.AMQP/Message/NmsMessage.cs
b/src/NMS.AMQP/Message/NmsMessage.cs
index c8cba84..16871ab 100644
--- a/src/NMS.AMQP/Message/NmsMessage.cs
+++ b/src/NMS.AMQP/Message/NmsMessage.cs
@@ -237,8 +237,8 @@ namespace Apache.NMS.AMQP.Message
public bool IsExpired()
{
- DateTime expireTime = Facade.Expiration;
- return expireTime > DateTime.MinValue && DateTime.UtcNow >
expireTime;
+ DateTime? expireTime = Facade.Expiration;
+ return expireTime != null && DateTime.UtcNow > expireTime;
}
public virtual NmsMessage Copy()
diff --git a/src/NMS.AMQP/NmsSession.cs b/src/NMS.AMQP/NmsSession.cs
index e45062e..5843606 100644
--- a/src/NMS.AMQP/NmsSession.cs
+++ b/src/NMS.AMQP/NmsSession.cs
@@ -406,15 +406,12 @@ namespace Apache.NMS.AMQP
if (isNmsMessage)
outbound = (NmsMessage) original;
else
- {
outbound =
NmsMessageTransformation.TransformMessage(Connection.MessageFactory, original);
- }
if (hasTTL)
outbound.Facade.Expiration = timeStamp + timeToLive;
- // TODO: Reset Expiration when
https://github.com/Azure/amqpnetlite/commit/13009980e40aedcb6310f8fa796fbee53be8a389
merged
- // else
- // outbound.Facade.Expiration = DateTime.MinValue;
+ else
+ outbound.Facade.Expiration = null;
outbound.OnSend(timeToLive);
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
index 29ec18c..6766602 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
@@ -29,12 +29,14 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
{
public class AmqpNmsMessageFacade : INmsMessageFacade
{
+ private const int ABSOLUTE_EXPIRY_TIME_INDEX = 8;
+
private TimeSpan? amqpTimeToLiveOverride;
private IDestination destination;
private IDestination replyTo;
private IDestination consumerDestination;
private IAmqpConnection connection;
- private DateTime syntheticExpiration;
+ private DateTime? syntheticExpiration;
public global::Amqp.Message Message { get; private set; }
public virtual bool HasBody()
@@ -206,19 +208,19 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
}
}
- public DateTime Expiration
+ public DateTime? Expiration
{
- get => Message.Properties?.AbsoluteExpiryTime ??
syntheticExpiration;
+ get => Message.Properties?.HasField(ABSOLUTE_EXPIRY_TIME_INDEX) ==
true ? Message.Properties.AbsoluteExpiryTime : syntheticExpiration;
set
{
- if (value != default)
+ if (value != null)
{
LazyCreateProperties();
- Message.Properties.AbsoluteExpiryTime = value;
+ Message.Properties.AbsoluteExpiryTime = value.Value;
}
- else if (Message.Properties != null)
+ else
{
- Message.Properties.AbsoluteExpiryTime = default;
+ Message.Properties?.ResetField(ABSOLUTE_EXPIRY_TIME_INDEX);
}
}
}
@@ -376,8 +378,8 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
InitializeHeader();
TimeSpan ttl = NMSTimeToLive;
- DateTime absoluteExpiryTime = Expiration;
- if (absoluteExpiryTime == default && ttl != default)
+ DateTime? absoluteExpiryTime = Expiration;
+ if (absoluteExpiryTime == null && ttl != default)
{
syntheticExpiration = DateTime.UtcNow + ttl;
}
diff --git a/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
b/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
index d7f3e09..b1d017d 100644
--- a/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
+++ b/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
@@ -74,7 +74,7 @@ namespace NMS.AMQP.Test.Message.Facade
public string NMSType { get; set; }
public string GroupId { get; set; }
public uint GroupSequence { get; set; }
- public DateTime Expiration { get; set; }
+ public DateTime? Expiration { get; set; }
public sbyte JmsMsgType { get; }
public bool IsPersistent { get; set; }
diff --git
a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
index 0da7b33..658d352 100644
--- a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
+++ b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
@@ -1016,11 +1016,11 @@ namespace NMS.AMQP.Test.Provider.Amqp
// --- absolute-expiry-time field ---
[Test]
- public void TestGetExpirationIsZeroForNewMessage()
+ public void TestGetExpirationIsNullForNewMessage()
{
AmqpNmsMessageFacade amqpNmsMessageFacade =
CreateNewMessageFacade();
- Assert.AreEqual(default(DateTime),
amqpNmsMessageFacade.Expiration);
+ Assert.IsNull(amqpNmsMessageFacade.Expiration);
}
[Test]
@@ -1049,17 +1049,18 @@ namespace NMS.AMQP.Test.Provider.Amqp
}
[Test]
- public void TestSetExpirationZeroOnMessageWithExistingExpiryTime()
+ public void TestSetExpirationNullOnMessageWithExistingExpiryTime()
{
DateTime timestamp = DateTime.UtcNow;
AmqpNmsMessageFacade amqpNmsMessageFacade =
CreateNewMessageFacade();
amqpNmsMessageFacade.Expiration = timestamp;
- amqpNmsMessageFacade.Expiration = default;
+ amqpNmsMessageFacade.Expiration = null;
Assert.AreEqual(default(DateTime),
amqpNmsMessageFacade.Message.Properties.AbsoluteExpiryTime, "Expected
absolute-expiry-time to be default");
- Assert.AreEqual(default(DateTime),
amqpNmsMessageFacade.Expiration, "Expected no expiration");
+
Assert.IsFalse(amqpNmsMessageFacade.Message.Properties.HasField(8), "Expected
absolute-expiry-time is not set");
+ Assert.AreEqual(null, amqpNmsMessageFacade.Expiration, "Expected
no expiration");
}
// --- user-id field ---
@@ -1352,7 +1353,7 @@ namespace NMS.AMQP.Test.Provider.Amqp
Assert.AreEqual(source.IsPersistent, copy.IsPersistent);
Assert.AreEqual(source.UserId, copy.UserId);
Assert.AreEqual(source.NMSTimeToLive, copy.NMSTimeToLive);
- Assert.IsTrue(Math.Abs((copy.Expiration -
source.Expiration).TotalMilliseconds) < 1);
+ Assert.IsTrue(Math.Abs((copy.Expiration.Value -
source.Expiration.Value).TotalMilliseconds) < 1);
Assert.IsTrue(Math.Abs((copy.NMSTimestamp -
source.NMSTimestamp).TotalMilliseconds) < 1);
Assert.AreEqual(source.Properties.GetString("APP-Prop-1"),
copy.Properties.GetString("APP-Prop-1"));
Assert.AreEqual(source.GetMessageAnnotation("test-annotation"),
copy.GetMessageAnnotation("test-annotation"));