Continous integration / Tests (push) Canceled after 0s
Testing clients / Build beanstalkd (push) Canceled after 0s
Continous integration / Docker build (push) Canceled after 0s
Testing clients / Test Pheanstalk PHP (push) Canceled after 0s
Testing clients / Test Greenstalk Python (3.9) (push) Canceled after 0s
Testing clients / Test Pystalk Python (3.10) (push) Canceled after 0s
8.0 KiB
8.0 KiB
07. Приёмка И Производительность
Статус: не начат. Baseline зависит от 01; итоговая приёмка зависит от 02-06.
Цель
Доказать корректность и полезность многопроцессного режима воспроизводимыми тестами. Наличие нескольких PID или рост общей загрузки CPU сами по себе не являются приёмкой.
Функциональная Матрица
| Область | Обязательные сценарии |
|---|---|
| Регрессии | make, make check по матрице 01; полный прежний набор при сохранении legacy; новый режим с 1 и несколькими owners |
| Создание tube | Одновременные use/watch через разные frontend, delete/recreate, единственный default, отсутствие создания на stats-tube |
| Routing | Все команды из 04; use и watch на разных owners; операции по ID независимо от текущей tube |
| Lifecycle | Ready/reserved/delayed/buried, kick/kick-job, приоритеты и FIFO, несколько резерваций на сессию |
| Watch | watch target перед ignore default; отказ multi-watch reserve; смена tube с живыми резервациями |
| Сессии | reserve-job другого owner, touch/delete старых резерваций, чужой reserved job, cleanup всех owners |
| Таймеры | Reserve timeout 0/positive, TTR, DEADLINE_SOON, delay, pause/unpause; гонки на границах времени |
| I/O | Partial requests/replies, pipelining, half-close, медленный client, large body, broken IPC, некорректные frame lengths |
| Ресурсы | IPC backpressure, OOM, ограниченные buffers, утечки памяти/FD после многократного reconnect |
| Отказы | Kill frontend/owner/supervisor, restart generations, stale messages, duplicate requests при наличии retry |
| WAL | Раздельные logs, partial/full restart, удалённые максимальные ID, compaction, rotation, disk full, crash windows |
| Эксплуатация | Drain, startup failure, невозможность двух writers, несовместимая карта, старые данные |
| Статистика | Нет двойного счёта сессий, один default, корректные process/binlog поля, недоступный owner |
Свойства Для Проверки
- Один job не имеет двух действующих резерваций, но обработка внешним worker может повториться после TTR. Не объявлять корректные TTR redeliveries дубликатами сервера.
- Один ожидающий reserve завершается ровно одним исходом либо закрытием соединения; поздний IPC-ответ не меняет этот исход.
- Зафиксированный набор полностью завершённых операций согласуется с итоговым состоянием при quiescent проверке. Не требовать атомарности произвольного распределённого
statssnapshot. - После завершённого cleanup не остаются ссылки умершей сессии; сообщение старого поколения не создаёт их заново.
- Успешные операции не теряются сверх заявленных гарантий WAL/fsync. Неизвестный результат при обрыве соединения учитывается отдельно от подтверждённого успеха.
- Недопустимая топология отвергается без модификации исходных данных.
Нагрузочная Матрица
- Сравнить исходную версию, новый режим с одним owner, новый режим с 2/4/доступным числом owners и независимые исходные экземпляры как ориентир стоимости IPC.
- Выполнить равномерную нагрузку по многим tubes, одну горячую tube и перекошенное распределение. Отдельно измерить создание/удаление множества короткоживущих tubes.
- Варировать число frontend и клиентов; показать, не стал ли frontend/supervisor/генератор нагрузки новым bottleneck.
- Повторить сравнения для WAL off/on, одинаковых
-f/-F, размера body, queue depth и смеси команд. - Измерять throughput завершённых lifecycle и отдельных команд, p50/p95/p99 latency, CPU каждого процесса, RSS/суммарную память, IPC traffic/backlog, disk throughput/fsync latency.
- Использовать прогрев, несколько повторов, одинаковые параметры сборки и инфраструктуры. Публиковать разброс и сырые результаты, а не только лучший запуск.
- Сопоставить с численными критериями, зафиксированными в 01 после baseline и до итоговых тестов. Если пороги не выполнены, представить профиль и причину; эпик не считать пройденным автоматически.
Средства
- Существующие команды:
make,make check,make bench. Последняя является набором микробенчмарков, а не end-to-end испытанием. - Добавить Unix integration harness для запуска ролей, kill/restart и инъекции отказов; переиспользовать
ct/и существующие подходыtestserv.c, где это сохраняет ясность. - Для ошибок памяти использовать доступные sanitizers или эквивалентные средства на поддерживаемой платформе. Они не заменяют проверки межпроцессной семантики.
- Не завязывать таймерные тесты только на короткие sleeps: использовать синхронизацию/наблюдаемые события и разумные временные допуски, чтобы избежать flaky результатов.
Итоговые Артефакты
- Автоматические тесты и воспроизводимые команды их запуска.
- Отчёт по compatibility matrix с явными ограничениями нового режима и политикой старых данных.
- Отчёт по производительности с baseline, конфигурациями, численными результатами и выводом о bottlenecks.
- Проверенные эксплуатационные инструкции и перечень оставшихся ограничений: одна tube последовательна, cross-shard watch reserve и live migration отсутствуют.
Реализация считается завершённой только после выполнения общей приёмки из 00-overview.md, а не после успешного happy path на двух процессах.