Files
rust-xmpp/docs/MESSAGE-LATENCY.md
T
wt e9329ccbb2
Test, build and publish / All tests and Linux binary (push) Failing after 23s
Test, build and publish / Container smoke test and Gitea publish (push) Skipped
- Исправлена задержка доставки MUC с растущим архивом: после каждого
сообщения
  больше не выполняется полный scan/rewrite архива для expiry. Очистка
  остаётся
  в maintenance и перед MAM-запросами; append и crash checkpoint до
  fanout сохранены.
- Неизменённые native config/persistent index не перезаписываются при
  каждом
  сообщении. Удалённые файлы восстанавливаются, ошибки экспорта
  повторяются.
- CSI больше не сохраняет SM snapshot при отсутствии изменения durable
  очереди.
  Изменённая очередь сохраняется до отправки; при ошибке записи очередь
  откатывается.
- Личные сообщения, IQ и входящая федерация к аккаунтам больше не
  захватывают
  общий MUC mutex, ожидая несвязанную работу с комнатными архивами.
- Добавлены регрессии native exports/archive scanning/CSI rollback и
  реальный
  TLS latency check в verify-local.sh, автоматически включённый и в CI.

Измерения и границы подтверждения:
[docs/MESSAGE-LATENCY.md](docs/MESSAGE-LATENCY.md).
Результаты итогового прогона:
[docs/VALIDATION-0.8.1.md](docs/VALIDATION-0.8.1.md).

- Личные сообщения и SM ACK больше не ждут сетевую отправку push.
  Уведомления
  отправляются через очередь1024 с максимум8параллельных маршрутов;
  worker
  и его задачи отменяются при завершении serve. Ошибки очереди/маршрута
  логируются.
- Offline сообщение сохраняется до публикации push, чтобы проснувшийся
  клиент
  мог сразу получить его. Подтверждена очередь при первом TLS stream
  push gateway.
- По умолчанию CSI считает важными bodyless OMEMO legacy/2, delivery
  receipts
  и chat markers. Явный список `csi_important_payloads` заменяет
  расширенные defaults.
  Низкоприоритетный headline по-прежнему буферизуется. Policy
  обновляется и при SM resume.
- Выбор адресатов и carbons фильтрует владельцев до захвата session
  mutex;
  зависшая сессия чужого аккаунта не задерживает этот путь. Duplicate SM
  ACK
  без изменения durable counters/queue не переписывает snapshot.
- Bind2 и MAM metadata IQ читают только первый/последний native record
  вместо
  сканирования всей истории. Индекс не требуется; recovery/лимиты записи
  сохранены.
- Добавлен `message-processing-slow`: обработка message дольше250мс,
  поля
  duration_ms/route, без payload/токенов. Это время обработки сервером,
  не peer receipt.
- Новые сетевые регрессии включены в verify-local.sh/GitHub CI.

Причины, изменение CSI policy, измерения и ограничения:
[docs/PERSONAL-MESSAGE-LATENCY.md](docs/PERSONAL-MESSAGE-LATENCY.md).
2026-10-21 11:20:09 +07:00

64 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Задержка доставки: исправление 0.8.1
В0.8.0 MUC после каждого groupchat append запускал expire_before. Эта операция
под общим mutex компонента проходила по всему архиву и записывала сохранённые
записи во временный файл даже при отсутствии истёкших записей. Задержка каждого
сообщения росла с размером истории. Дополнительно переписывались неизменённые
native room config/persistent index, а CSI сохранял полную durable SM-сессию
даже при пустой/неизменённой очереди.
В0.8.1 эти лишние операции исключены из обычного пути доставки. Очистка архива
остаётся в периодическом maintenance (интервал сервера300с) и перед MAM-запросами.
Неизменённые native-файлы не переписываются; недостающие/изменённые экспорты и
повтор после ошибки сохранены. Авторитетный MUC checkpoint и SM state по-прежнему
записываются до подтверждения соответствующих изменений. CSI откатывает изменение
очереди при ошибке checkpoint. Ненаправленный в MUC account traffic обходит mutex
компонента и не ждёт его обслуживания архивов.
## Измерение
Настоящий STARTTLS, два клиента, durable SM, MUC MAM с finite retention,
active/inactive CSI. Изолированный loopback; архив native `.list` заполнен до
запуска сервера. Проверяются доставка sender echo/peer, counters, durable CSI
buffer/flush и точное число записей архива. Порог задержки в миллисекундах не
используется как flaky assertion; структурные регрессии запрещают полный scan
архива при append и запись неизменённых native-файлов.
Active CSI, MUC peer, мс:
| Записей истории | 0.8.0 median / p95 | 0.8.1 median / p95 |
|---:|---:|---:|
|0|9.425 / 11.221|5.054 / 7.643|
|1000|32.718 / 36.995|4.280 / 6.605|
|10000|259.472 / 269.067|4.895 / 6.307|
|100000|2517.940 / 2520.941|4.680 / 14.532|
Inactive CSI,100000 записей: median3866.027→4.285мс,
p95 4150.867→5.072мс. Первые три строки —5samples/state, последняя —3.
Это ограниченное сравнение на одном loopback host, а не production SLA и не
доказательство всех возможных причин задержки у реальных клиентов.
Полные сырые samples и SHA-256 обеих сборок — validation-logs-0.8.1/latency-*.json.
Команды:
```bash
python3 tests/message_latency_network.py --binary target/release/rust-xmpp \
--rounds 5 --history-records 0 1000 10000 --output /tmp/message-latency.json
python3 tests/message_latency_network.py --binary target/release/rust-xmpp \
--rounds 3 --history-records 100000 --output /tmp/message-latency-100k.json
```
Быстрая проверка0/10000 records уже включена в verify-local.sh и GitHub Actions.
Для повторной медленной проверки используйте сохранённую0.8.0 release-сборку;
не приписывайте исходному бинарнику результаты пересобранной новой версии.
## Если задержка остаётся в целевой установке
Сопоставьте время отправки, получения и отображения delivery/read receipt,
тип чата, transport, состояние CSI и наличие федерации. Доставка сообщения и
receipt — разные события. Native CSI policy для низкоприоритетных payload не
менялась. Длительный MAM query, периодическая очистка большого архива, медленный
диск или внешний XMPP-домен могут иметь отдельную задержку. Текущие изменения
не отключают fsync, не обещают exactly-once и не подменяют проверку реальных
Conversations/Monal/Gajim либо deployment.