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:
@@ -212,6 +212,9 @@ func countBatchEntries(req *http.Request, action string) int {
|
||||
} else if action == "ChangeMessageVisibilityBatch" {
|
||||
prefix = "ChangeMessageVisibilityBatchRequestEntry."
|
||||
}
|
||||
// Разбираем form, если ещё не разобран (иначе PostForm пуст для lazy-запросов).
|
||||
_ = req.ParseForm()
|
||||
|
||||
if req.PostForm != nil || req.Form != nil {
|
||||
form := req.Form
|
||||
if form == nil {
|
||||
|
||||
Reference in New Issue
Block a user