Skip to content

Commit 87ff3f1

Browse files
authored
Merge pull request #67 from cloudblue/bugfix/LITE-22673
LITE-22673 Fixed MESSAGE_TTL in cqrs_dead_letters retry command
2 parents 5ff3dfa + af9a34c commit 87ff3f1

File tree

5 files changed

+23
-12
lines changed

5 files changed

+23
-12
lines changed

dj_cqrs/management/commands/cqrs_dead_letters.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
1+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
22

3+
from dj_cqrs.constants import DEFAULT_MASTER_MESSAGE_TTL
34
from dj_cqrs.dataclasses import TransportPayload
45
from dj_cqrs.registries import ReplicaRegistry
56
from dj_cqrs.transport import current_transport
@@ -105,7 +106,7 @@ def handle_retry(self, channel, consumer_generator, dead_letters_count):
105106
dct['retries'] = 0
106107
if dct.get('expires'):
107108
# Message could expire already
108-
expires = get_message_expiration_dt()
109+
expires = get_message_expiration_dt(DEFAULT_MASTER_MESSAGE_TTL)
109110
dct['expires'] = expires.replace(microsecond=0).isoformat()
110111
payload = TransportPayload.from_message(dct)
111112
payload.is_requeue = True

dj_cqrs/management/commands/cqrs_sync.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ def handle(self, *args, **options):
6666
if progress:
6767
print('Processing {0} records with batch size {1}'.format(db_count, batch_size))
6868

69-
for qs in batch_qs(model.relate_cqrs_serialization(qs), batch_size=batch_size):
69+
for qs_ in batch_qs(model.relate_cqrs_serialization(qs), batch_size=batch_size):
7070
ts = time.time()
7171
cs = counter
72-
for instance in qs:
72+
for instance in qs_:
7373
counter += 1
7474
try:
7575
instance.cqrs_sync(queue=options['queue'])

dj_cqrs/utils.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
1+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
22

33
import logging
44
from datetime import timedelta
@@ -10,13 +10,14 @@
1010
logger = logging.getLogger('django-cqrs')
1111

1212

13-
def get_message_expiration_dt():
13+
def get_message_expiration_dt(message_ttl=None):
1414
"""Calculates when message should expire.
1515
16+
:param int or None message_ttl:
1617
:return: Expiration datetime or None if infinite
1718
:rtype: datetime.datetime or None
1819
"""
19-
message_ttl = settings.CQRS['master']['CQRS_MESSAGE_TTL']
20+
message_ttl = message_ttl or settings.CQRS['master']['CQRS_MESSAGE_TTL']
2021
if message_ttl is None:
2122
# Infinite
2223
return

tests/test_commands/test_dead_letters.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
1+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
22

33
from datetime import datetime
44

@@ -61,7 +61,6 @@ def test_handle_retry(settings, capsys, mocker):
6161
method_frame = mocker.MagicMock()
6262
method_frame.delivery_tag = 12
6363

64-
settings.CQRS['master']['CQRS_MESSAGE_TTL'] = 3600
6564
fake_now = datetime(2020, 1, 1, second=0, tzinfo=timezone.utc)
6665
mocker.patch('django.utils.timezone.now', return_value=fake_now)
6766
message = {
@@ -86,15 +85,15 @@ def test_handle_retry(settings, capsys, mocker):
8685

8786
produce_message = ujson.loads(produce_kwargs['body'])
8887
assert produce_message['instance_data'] == message['instance_data']
89-
assert produce_message['expires'] == '2020-01-01T01:00:00+00:00'
88+
assert produce_message['expires'] == '2020-01-02T00:00:00+00:00'
9089
assert produce_message['retries'] == 0
9190

9291
captured = capsys.readouterr()
9392
total_msg, retrying_msg, body_msg = captured.out.strip().split('\n')
9493

9594
assert total_msg == 'Total dead letters: 1'
9695
assert retrying_msg == 'Retrying: 1/1'
97-
assert '2020-01-01T01:00:00+00:00' in body_msg
96+
assert '2020-01-02T00:00:00+00:00' in body_msg
9897

9998
assert channel.basic_nack.call_count == 1
10099
assert channel.basic_nack.call_args[0][0] == 12

tests/test_utils.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
1+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
22

33
from datetime import datetime, timedelta, timezone
44

@@ -18,6 +18,16 @@ def test_get_message_expiration_dt_fixed(mocker, settings):
1818
assert result == expected_result
1919

2020

21+
def test_get_message_expiration_dt_fixed_from_parameter(mocker, settings):
22+
fake_now = datetime(2020, 1, 1, second=0, tzinfo=timezone.utc)
23+
mocker.patch('django.utils.timezone.now', return_value=fake_now)
24+
25+
result = get_message_expiration_dt(message_ttl=2200)
26+
27+
expected_result = fake_now + timedelta(seconds=2200)
28+
assert result == expected_result
29+
30+
2131
def test_get_message_expiration_dt_infinite(mocker, settings):
2232
settings.CQRS['master']['CQRS_MESSAGE_TTL'] = None
2333
fake_now = datetime(2020, 1, 1, second=0, tzinfo=timezone.utc)

0 commit comments

Comments
 (0)