diff --git a/moto/sqs/models.py b/moto/sqs/models.py index 5b0f5f430..421a1e5c7 100644 --- a/moto/sqs/models.py +++ b/moto/sqs/models.py @@ -818,8 +818,6 @@ class SQSBackend(BaseBackend): # A previous call is still processing messages in this group, so we cannot deliver this one. continue - queue.pending_messages.add(message) - if ( queue.dead_letter_queue is not None and message.approximate_receive_count @@ -828,6 +826,7 @@ class SQSBackend(BaseBackend): messages_to_dlq.append(message) continue + queue.pending_messages.add(message) message.mark_received(visibility_timeout=visibility_timeout) _filter_message_attributes(message, message_attribute_names) result.append(message) diff --git a/tests/test_sqs/test_sqs.py b/tests/test_sqs/test_sqs.py index df7b8dec8..b7cbc793a 100644 --- a/tests/test_sqs/test_sqs.py +++ b/tests/test_sqs/test_sqs.py @@ -2384,3 +2384,42 @@ def test_fifo_queue_send_deduplicationid_same_as_sha256_of_old_message(): ) messages = msg_queue.receive_messages(MaxNumberOfMessages=2) messages.should.have.length_of(1) + + +@mock_sqs +def test_fifo_send_message_when_same_group_id_is_in_dlq(): + + sqs = boto3.resource("sqs", region_name="us-east-1") + dlq = sqs.create_queue( + QueueName="test-queue-dlq.fifo", Attributes={"FifoQueue": "true"} + ) + + queue = sqs.get_queue_by_name(QueueName="test-queue-dlq.fifo") + dead_letter_queue_arn = queue.attributes.get("QueueArn") + + msg_queue = sqs.create_queue( + QueueName="test-queue.fifo", + Attributes={ + "FifoQueue": "true", + "RedrivePolicy": json.dumps( + {"deadLetterTargetArn": dead_letter_queue_arn, "maxReceiveCount": 1}, + ), + "VisibilityTimeout": "1", + }, + ) + + msg_queue.send_message(MessageBody="first", MessageGroupId="1") + messages = msg_queue.receive_messages() + messages.should.have.length_of(1) + + time.sleep(1.1) + + messages = msg_queue.receive_messages() + messages.should.have.length_of(0) + + messages = dlq.receive_messages() + messages.should.have.length_of(1) + + msg_queue.send_message(MessageBody="second", MessageGroupId="1") + messages = msg_queue.receive_messages() + messages.should.have.length_of(1)