Skip to content

v4.0.1 — фиксы секции ротации логов (#24, #25) - #26

Merged
jestivald merged 3 commits into
mainfrom
v4.0.1-logrotate-fixes
Aug 31, 2026
Merged

jestivald merged 3 commits into
mainfrom
v4.0.1-logrotate-fixes

Conversation

@jestivald

Copy link
Copy Markdown
Owner

Патч-релиз: два бага секции ротации, пойманные при раскатке v4.0 на флот, плюс латентный третий, вскрытый новым тестом.

  • optimize: ре-ран падает в секции ротации — backup_file без второго аргумента (set -u: $2 unbound) #24 — ре-ран падал: backup_file "$LR_CONF" без второго аргумента; $2 unbound под set -u стрелял только когда станса уже существует. Фикс: аргумент + ${2:?…}-guard в хелпере — одноаргументный вызов теперь падает сразу и внятно.
  • optimize: дубль-детект logrotate сравнивает строки-маски, а logrotate — раскрытые файлы: конфликт не ловится, na-logrotate.service падает #25 — дубль-детект сравнивал строки: logrotate дедуплицирует по раскрытым файлам — конфликт с чужой стансой (явные пути / пакетная nginx / другой глоб) не ловился → duplicate log entry, скип стансы-жертвы целиком, na-logrotate.service failed при active-таймере. Фикс: вердикт самого logrotate -d по всему набору; конфликтные маски отдаются чужим стансам с warn, чужие дубликаты вне наших масок — предупреждение.
  • Латентный: голый word-split $NA_LOG_PATHS глоб-раскрывался шеллом по живым файлам — в стансу ложились явные пути вместо масок (лог нового vhost'а никогда не начал бы ротироваться). Фикс: read -a.
  • Тест: tests/logrotate-unit.sh извлекает секцию ротации и ИСПОЛНЯЕТ её против стабов logrotate/systemctl (5 кейсов / 23 проверки; на v4.0 красный по всем трём пунктам) + шаг в CI.

Closes #24
Closes #25

🤖 Generated with Claude Code

jestivald and others added 3 commits August 31, 2026 19:56
…м logrotate (#24, #25)

Раскатка v4.0 на флот в день релиза вскрыла два бага секции ротации и один латентный.

Ре-ран (#24): backup_file звался с одним аргументом; на первом прогоне [[ -f ]]
коротил цепочку, на повторном голый $2 под set -u ронял модуль посреди секции —
падал ровно тот прогон, которым чинят конфигурацию. Теперь аргумент передаётся,
а хелпер требует каталог назначения через ${2:?…}: будущий одноаргументный вызов
упадёт сразу и внятно на любом прогоне.

Дубль-детект (#25): сравнение СТРОК масок против чужих станс, а logrotate
дедуплицирует по РАСКРЫТЫМ файлам — конфликт с явными путями или другим глобом
не ловился, logrotate целиком скипал стансу-жертву и выходил с ошибкой,
na-logrotate.service уходил в failed при active-таймере. Теперь арбитр — сам
logrotate: станса пишется целиком, `-d` по всему набору, конфликтные маски
отдаются чужим стансам (у них может быть сигнальный reload вместо copytruncate).
Чужие дубликаты вне наших масок — предупреждение, не наша починка.

Латентный: голый word-split $NA_LOG_PATHS глоб-раскрывался по живым файлам, и в
стансу ложились ЯВНЫЕ пути вместо масок — лог нового vhost'а никогда не начал бы
ротироваться. Теперь read -a: маски идут как заданы.

tests/logrotate-unit.sh извлекает секцию и ИСПОЛНЯЕТ её против стабов
logrotate/systemctl (5 кейсов, 23 проверки; на v4.0 красный по всем трём
пунктам) — добавлен в CI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
NA_VERSION 4.0.0 → 4.0.1, NA_REF в примерах README/install.sh → v4.0.1, секция в
CHANGELOG. Патч-релиз: фиксы секции ротации логов (#24, #25) и глоб-раскрытия
NA_LOG_PATHS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jestivald
jestivald merged commit 51358f7 into main Aug 31, 2026
6 checks passed
@jestivald
jestivald deleted the v4.0.1-logrotate-fixes branch August 31, 2026 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant