refactor(P1.2-revue): Compact — один RebuildIndexes + ensureIndexes; журнал ревью-фиксов
Пункт 4 ревью: убран дублирующий блок перестройки индексов в Compact (ensureIndexes на входе + один RebuildIndexes на выходе). Поведение то же, логика чище. Дополнен HISTORY разделом о фиксах код-ревью.
This commit is contained in:
@@ -298,15 +298,12 @@ func (q *Queue) CompactIfNeeded() {
|
||||
// Compact — физически удаляет tombstone-слоты, сохраняя порядок живых, и
|
||||
// перестраивает индексы. O(N). Вызывать под write-блокировкой.
|
||||
func (q *Queue) Compact() {
|
||||
// ensureIndexes гарантирует len(deadIdx)==len(Messages) (иначе слоты разъедутся)
|
||||
// и корректность deadCount. При согласованном состоянии — две дешёвые проверки.
|
||||
q.ensureIndexes()
|
||||
if q.deadCount == 0 {
|
||||
return
|
||||
}
|
||||
if len(q.deadIdx) != len(q.Messages) {
|
||||
q.RebuildIndexes()
|
||||
if q.deadCount == 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
n := 0
|
||||
for i := range q.Messages {
|
||||
if q.deadIdx[i] {
|
||||
@@ -323,10 +320,9 @@ func (q *Queue) Compact() {
|
||||
tail[i] = SqsMessage{}
|
||||
}
|
||||
q.Messages = q.Messages[:n]
|
||||
// После чистки tombstone нет — сбрасываем флаги, чтобы RebuildIndexes
|
||||
// построил индексы только по живым (иначе старые deadIdx-флаги «съедут»).
|
||||
// После чистки tombstone нет: обнуляем флаги и перестраиваем индексы по живым
|
||||
// (RebuildIndexes заново посчитает liveCount/deadCount и заполнит receipt/uuid).
|
||||
q.deadIdx = q.deadIdx[:0]
|
||||
q.deadCount = 0
|
||||
q.RebuildIndexes()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user