Skip to content

Commit 0db03b1

Browse files
authored
[ServiceBus] Fix TTL on messages (Azure#21869)
Using `seconds` on `timedelta` to set TTL leads to unexpected behaviour with, for example, `timedelta(days=1)`: ``` azure.servicebus.exceptions.ServiceBusError: Argument TimeToLIve must be a positive timeout value. The provided value was 00:00:00. Parameter name: TimeToLIve Actual value was 00:00:00 ``` Instead of `seconds`, `total_seconds()` should be used: ``` >>> timedelta(days=1).seconds 0 >>> timedelta(days=1).total_seconds() 86400.0 ```
1 parent 35d5436 commit 0db03b1

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

sdk/servicebus/azure-servicebus/azure/servicebus/_common/message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ def time_to_live(self, value):
353353
if self._raw_amqp_message.properties.absolute_expiry_time:
354354
self._raw_amqp_message.properties.absolute_expiry_time = value
355355
elif isinstance(value, datetime.timedelta):
356-
self._raw_amqp_message.header.time_to_live = value.seconds * 1000
356+
self._raw_amqp_message.header.time_to_live = int(value.total_seconds()) * 1000
357357
else:
358358
self._raw_amqp_message.header.time_to_live = int(value) * 1000
359359

sdk/servicebus/azure-servicebus/tests/test_message.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,11 @@ def test_amqp_message():
188188
assert amqp_annotated_message.properties.group_id == 'id'
189189
assert amqp_annotated_message.properties.group_sequence == 1
190190
assert amqp_annotated_message.properties.reply_to_group_id == 'id'
191+
192+
193+
def test_servicebus_message_time_to_live():
194+
message = ServiceBusMessage(body="hello")
195+
message.time_to_live = timedelta(seconds=30)
196+
assert message.time_to_live == timedelta(seconds=30)
197+
message.time_to_live = timedelta(days=1)
198+
assert message.time_to_live == timedelta(days=1)

0 commit comments

Comments
 (0)