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
7.6 KiB
7.6 KiB
01. Контракты И Baseline
Статус: не начат. Зависимости: нет.
Цель
До изменения модели исполнения зафиксировать проверяемые границы совместимости, интерфейсы процессов и условия сравнения производительности. Принятое архитектурное направление не является утверждением всех деталей ниже.
Задачи
- Сопоставить
doc/protocol.txtсprot.c,conn.c,job.c,tube.cи WAL. Зафиксировать значимые расхождения кода и документации, не исправляя их попутно без отдельного решения. - Описать роли supervisor, frontend, owner; определить число frontend и способ принятия соединений. Не создавать центрального диспетчера всех queue-операций без измерения его предела.
- Определить opt-in нового режима, конфигурацию топологии и совместимость со старым запуском, TCP/Unix sockets, socket activation, сменой пользователя и сигналами.
- Снять baseline существующей версии: CPU, throughput, latency, память и WAL I/O. Сохранить воспроизводимые команды и параметры.
- Подготовить таблицу состояний сессии, ожидания reserve, передачи ответа, аварии frontend и owner. Указать точки изменения состояния и подтверждения операции.
Решения До Реализации
| Вопрос | Ограничение для решения | Где реализуется |
|---|---|---|
| Переход и legacy | Выбрать сохранение отдельного legacy с opt-in либо согласованный переход на новую архитектуру. Два режима не являются уже утверждённым обязательством; новый режим с одним owner не равен прежнему серверу по возможностям | 04, 05, 06, 07 |
| Multi-watch reserve | Не выбирать первую tube и не выдавать TIMED_OUT как будто очередь пуста. Выбрать документированный отказ/закрытие или явно согласованное расширение; не объявлять такой ответ стандартом 1.13 |
04 |
| Наблюдение одной tube, резервации нескольких | Сохранить reserve-job, смену watch list и проверки TTR/DEADLINE_SOON по всем резервациям сессии; дополнительное ограничение требует отдельного согласования |
03, 04 |
| Неизвестный результат мутации | Не повторять put автоматически. Определить закрытие соединения и судьбу сессии при разрыве IPC; request ID не даёт durable exactly-once |
03, 06 |
| Сбой владельца | Выбрать политику затронутых TCP-сессий; безопасная исходная стратегия: закрыть затронутые сессии и очистить их ссылки у остальных владельцев. Не продолжать старые резервации после replay как будто аварии не было | 03, 05, 06 |
| Формат топологии | Фиксировать hash/version/seed при наличии, число разделов, карту, slot IDs, fingerprint. Проверять до открытия WAL для записи | 02, 05 |
| Job ID | Decimal uint64 на wire; уникальность, маршрутизация, порядок внутри tube, переполнение и частичные перезапуски. Определить импорт старых ID | 04, 05 |
| Старый WAL | Выбрать явный offline import либо контролируемый отказ нового режима; исходные данные не изменять автоматически. Если legacy сохраняется, он должен читать прежние данные | 05 |
| Диагностика | Определить смысл pid, id, uptime, rusage-*, binlog-полей и счётчиков после частичного перезапуска |
04, 06 |
| Платформы | Определить поддерживаемые платформы новой архитектуры и политику остальных; если legacy сохраняется, его существующие платформы не регрессируют. Linux-first допустим только как явная граница | 03, 06, 07 |
| Численные лимиты | Утвердить лимиты IPC/body buffering, сроки очистки умерших сессий, restart policy и критерии производительности | 03, 06, 07 |
Открытые решения оформлять в соответствующем документе как выбранный контракт с обоснованием. Внешние ограничения сверх одной наблюдаемой tube выносить на согласование, а не выбирать неявно в коде.
Baseline
- Матрица: одна/много tubes, один/много клиентов, короткие/крупные bodies, ready/delayed workload, WAL off/on, обычный fsync и
-f 0. - Генератор нагрузки не должен насыщать CPU раньше сервера. Фиксировать CPU affinity, оборудование, ОС, compiler/CFLAGS, размеры данных и семя распределения.
- Измерять завершённый lifecycle
put -> reserve -> deleteи отдельные операции; точно определить единицу throughput. - Выполнить профилирование: обход tubes в
next_awaited_jobиsoonest_delayed_job, системные вызовы, копирование, WAL. Не считать кандидатов доказанными bottlenecks без профиля. - Не менять алгоритмы исходной версии в рамках снятия baseline.
Приёмка
- Для каждой строки таблицы есть выбранное поведение либо явно блокируемая ею реализация; блокирующие решения закрыты до начала зависимых изменений.
- Сценарии transient multi-watch, смены tube с живой резервацией и
reserve-jobдругой tube присутствуют в тест-плане. - Есть спецификация запуска, топологии, session identity, command ownership и ошибок.
- Есть сохранённый baseline и заранее заданные критерии сравнения для эпика 07.
Точки Кода
main.c, util.c:optparse, net.c, serv.c, prot.c:dispatch_cmd, conn.c, dat.h, Makefile, testserv.c.