fix: DLQ-релинк после загрузки из Redis + безопасная эвикция retention + ParseForm
1. DLQ больше не сериализуется вложенным объектом (была detached-копия после загрузки + неограниченная рекурсия при цикле): в метаданных хранится только имя (dead_letter_queue_name), после LoadAllQueues указатель релинкуется на объект из map. Закрывает потерянные переносы в DLQ и чужой мьютекс. 2. Retention-эвикция: компакция НА МЕСТЕ (чтение value в i, запись в n<=i) вместо kept := Messages[:0] — устранён алиасинг на переиспользуемом срезе. 3. countBatchEntries: явный req.ParseForm() — корректный msg_count для батчей. Тесты: +DLQ-перенос, +эвикция с сохранением порядка; go test -race зелёный.
This commit is contained in:
@@ -62,7 +62,11 @@ type Queue struct {
|
||||
MessageRetentionPeriod int // seconds (реализовано в processQueueTick)
|
||||
Messages []SqsMessage
|
||||
DeadLetterQueue *Queue
|
||||
MaxReceiveCount int
|
||||
// DeadLetterQueueName — имя DLQ. В Redis-метаданных хранится ТОЛЬКО имя
|
||||
// (а не вложенный объект): после загрузки указатель DeadLetterQueue
|
||||
// релинкуется на объект из общей map (см. persistence.LoadAllQueues).
|
||||
DeadLetterQueueName string `json:"dead_letter_queue_name,omitempty"`
|
||||
MaxReceiveCount int
|
||||
IsFIFO bool
|
||||
FIFOMessages map[string]int
|
||||
FIFOSequenceNumbers map[string]int
|
||||
|
||||
Reference in New Issue
Block a user