Fix sqs message retention logic (#3924)

* Fix sqs message retention logic

* Apply lint to moto/sqs/models.py

* Fix failed tests because of freezing time

* Fix freezing time in test_publish_to_sqs_in_different_region
This commit is contained in:
Kai 2021-05-13 23:06:54 +09:00 committed by GitHub
commit f9e0595e12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 11 deletions

View file

@ -836,7 +836,9 @@ class SQSBackend(BaseBackend):
queue.pending_messages.add(message)
message.mark_received(visibility_timeout=visibility_timeout)
_filter_message_attributes(message, message_attribute_names)
if not self.is_message_valid_based_on_retention_period(queue_name):
if not self.is_message_valid_based_on_retention_period(
queue_name, message
):
break
result.append(message)
if len(result) >= count:
@ -1015,11 +1017,12 @@ class SQSBackend(BaseBackend):
def list_queue_tags(self, queue_name):
return self.get_queue(queue_name)
def is_message_valid_based_on_retention_period(self, queue_name):
def is_message_valid_based_on_retention_period(self, queue_name, message):
message_attributes = self.get_queue_attributes(queue_name, [])
retain_until = message_attributes.get(
"MessageRetentionPeriod"
) + message_attributes.get("CreatedTimestamp")
retain_until = (
message_attributes.get("MessageRetentionPeriod")
+ message.sent_timestamp / 1000
)
if retain_until <= unix_time():
return False
return True