- Исправлена задержка доставки MUC с растущим архивом: после каждого
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

сообщения
  больше не выполняется полный 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).
This commit is contained in:
wt committed 2026-10-21 11:20:09 +07:00
1 parent b798b3f9b7
commit e9329ccbb2
48 files changed
+11073 -235

No files matched your search

+2 -2
View File
@@ -11,14 +11,14 @@
|---|---|---|
| Конфигурация | Lua/JSON/YAML/YML/TOML, Include, глобальные и локальные области, наследование модулей | Lua VM ограничена; не все функции окружения конфигуратора Prosody доступны. Runtime обслуживает один VirtualHost и его компоненты |
| Хранилище | internal `.dat`, `.list`, бинарные строки, смешанные ключи Lua, атомарные записи, потоковые архивы, инвалидирование `.lidx` | SQL, external storage остальных модулей и произвольные драйверы не реализованы; S3 uploads поддержаны. Каталог блокируется между процессами Rust; Prosody в блокировке не участвует |
| Аккаунты, saslauth | internal_hashed SHA-1/SHA-256, SASLprep, PLAIN внутри TLS, SCRAM и PLUS с tls-exporter/tls-server-end-point, SSDP, SASL2 | Только internal_hashed; опциональный sasl2_bind2 (alias bind2) поддерживает inline bind/SM/CSI/Carbons. SASL2 inline SM resume и takeover живого транспорта реализованы; MAM metadata при Bind2 читает весь архив синхронно |
| Аккаунты, saslauth | internal_hashed SHA-1/SHA-256, SASLprep, PLAIN внутри TLS, SCRAM и PLUS с tls-exporter/tls-server-end-point, SSDP, SASL2 | Только internal_hashed; опциональный sasl2_bind2 (alias bind2) поддерживает inline bind/SM/CSI/Carbons. SASL2 inline SM resume и takeover живого транспорта реализованы; Bind2/MAM metadata читает endpoints без полного scan; полные MAM queries всё ещё могут сканировать историю |
| Сообщения и presence | локальная маршрутизация, приоритеты ресурсов, контакты/подписки/probes, offline, carbons, блокировки | Полная совместимость всех пограничных сценариев маршрутизации ещё не подтверждена |
| MAM | личный и комнатный MAM2, prefs, формы, RSM, фильтры времени/контакта/ID, extended queries, metadata, stanza-id, expiry | Нет доказательства совпадения каждой ошибки и порядка результатов при всех комбинациях запроса |
| MUC | комнаты, несколько ресурсов, роли/affiliations, owner/admin, конфигурация, приглашения, история без MAM и MAM, occupant-id/avatar, hats, PM/presence policies, регистрация, административные ad-hoc команды; журнал конфигурации, членства и истории до ответа, crash recovery persistent/temporary комнат | Rust-журнал авторитетен, native config/state — экспорт. Без SM восстановление требует новой аутентификации точного полного JID; grace по умолчанию 300 с, `muc_recovery_grace_period` 1..604800. Действующая приватная SM-запись восстанавливает логическое членство до listeners. Произвольные Lua-модули не запускаются; [MUC-RECOVERY.md](MUC-RECOVERY.md) |
| PEP/pubsub | persistent nodes/items, ACL, subscriptions, publish/retract/purge/delete, owner/configuration, caps, OMEMO XML как payload | Не все необязательные политики узлов Prosody реализованы; OMEMO шифруют клиенты, криптография OMEMO не часть сервера |
| private/bookmarks/vCard | private XML, старые и новые закладки, vCard/temp-vCard4 и avatar-переходы | Межклиентное поведение нужно дополнительно проверить настоящими клиентами |
| SM/push | acknowledgements после обработки, resumable XEP-0198 sessions, replay, ограниченные очереди, приватный durable snapshot, heartbeat и shutdown checkpoint; legacy SASL/SASL2 resume после restart; native регистрации push | Нужны новый TLS/SASL-транспорт и токен того же владельца; TCP/TLS-сокеты не сохраняются. SM-снимок не native Prosody: 256 MiB суммарно, 8 MiB/4096 stanza на сессию. При неопределённой отправке возможен replay. Есть coalescing и watchdog первого push; реальный APNs/FCM цикл не подтверждён |
| CSI | active/inactive, ограниченный буфер, native importance rules, delay, flush при клиентской активности и grace period | Событие socket drain приближено завершением записи; необязательные расширенные XPath-фильтры поддержаны не полностью |
| CSI | active/inactive, ограниченный буфер, native importance function + runtime defaults для OMEMO/receipts/markers, delay, flush при клиентской активности и grace period | Defaults0.8.2 важнее по доставке, чем строгая native policy; явный csi_important_payloads заменяет defaults. Событие socket drain приближено завершением записи; необязательные расширенные XPath-фильтры поддержаны не полностью |
| Федерация | входящие/исходящие STARTTLS, CA/DNS-ID, SASL EXTERNAL, DNS SRV, проверка домена каждого stanza, ограниченный пул соединений | Нет dialback/DANE/OtherName-only/SRV-ID/bidi/direct TLS |
| HTTP upload | Несколько XEP-0363 components, Host/path isolation, local/S3 gateway, multipart/SigV4, streaming PUT, GET/HEAD/range/conditional, квоты/expiry, native metadata/JWT; offline local↔S3/S3↔S3 migration с SHA-256/resume; intent/exact-key recovery и quarantine; реальный 10 GiB PUT/GET через MinIO проверен | MinIO single-node с описанным netlink adapter тестовой среды; AWS/distributed deployment не проверены. Миграция требует остановки сервера и временного места под один файл; source сохраняется. Потерянные ownership metadata и неопределённый Complete требуют отдельного разбора; HTTP-UPLOAD.md |
| WebSocket/BOSH | WS/WSS и HTTP/HTTPS, общая XMPP-сессия, origin rules, BOSH RID/retry/hold/reorder/restart; http_altconnect XRD/JRD discovery; http_paths, HTTP Host/fallback, внешний URL, доверенные IP/CIDR и forwarded headers для TLS reverse proxy | Один VirtualHost с компонентами; нет PROXYv1/v2, произвольных Lua HTTP-приложений и горячей перенастройки. См. HTTP-PROXY.md |
+1 -1
View File
@@ -53,7 +53,7 @@ Image smoke проходит и на PR. Только после успеха в
- `sha-<полный40символьныйcommit>` — каждый публикуемый commit;
- `latest` — только основная ветка;
- `v0.8.0` — пример version tag; он должен совпадать с Cargo.toml.
- `v0.8.2` — пример version tag; он должен совпадать с Cargo.toml.
Version tag не меняет latest; prerelease также не перезаписывает latest.
Собирается Linux amd64, не multiarch. Локальный `docker build .` по-прежнему
+63
View File
@@ -0,0 +1,63 @@
# Задержка доставки: исправление 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.
+102
View File
@@ -0,0 +1,102 @@
# Личные сообщения: исправления0.8.2
Предыдущий0.8.1 устранил per-message MUC archive scan и часть лишних CSI writes.
Отдельная проверка личных чатов обнаружила другие причины. Испытания ниже
проведены на loopback; это не подтверждение поведения конкретной production-сессии.
## Push не должен останавливать чат
В прежнем обработчике после локальной доставки выполнялся await внешнего
push IQ route и только потом обновлялся handled и читалось следующее сообщение.
Неполадки DNS/TCP/TLS/SASL внешнего шлюза задерживали отправителя до сетевого
таймаута (30с на route). При полностью offline получателе push даже отправлялся
раньше записи offline archive.
Регрессия воспроизвела настоящий исходящий STARTTLS к шлюзу, который после TLS
не присылает features. У0.8.1 через2с первое сообщение уже в durable SM pending,
второго нет, SM ACK отсутствует. У0.8.0 с полностью offline получателем в этот
момент ещё нет даже первого offline record. В0.8.2 в обоих сценариях оба сообщения
сохранены и sender ACK h=4 соответствует входящим4 stanza при том же зависшем
шлюзе. Offline records присутствуют уже при первом post-TLS stream gateway.
Уведомления теперь маршрутизирует ограниченный worker:1024queued,8in-flight.
При переполнении/ошибке notification routing пишет warning; подтверждение
сообщения не означает успешный push. Очередь уведомлений не durable и при
остановке отменяется; сами сообщения сохраняются независимо. Проверен XMPP
push fixture, не APNs/FCM и не промышленный мобильный цикл.
## CSI и зашифрованные сообщения без body
Прежняя policy считала unimportant receipt-only и ciphertext-only OMEMO без
body/EME. При `inactive` они могли ждать активности клиента. В тесте намеренный
dwell2с показан отдельно: это время удержания, не вычислительная задержка.
Сервер уже быстро отвечал SM ACK, но пользователь ещё не видел payload/receipt.
Default `csi_important_payloads` в0.8.2:
- `{eu.siacs.conversations.axolotl}encrypted`
- `{urn:xmpp:omemo:2}encrypted`
- `{urn:xmpp:receipts}received`
- `{urn:xmpp:chat-markers:0}received`
- `{urn:xmpp:chat-markers:0}displayed`
- `{urn:xmpp:chat-markers:0}acknowledged`
Они выходят без ожидания active. Body, EME и остальные прежние important payload
сохраняют поведение; headline и прочие unimportant данные продолжают буферизоваться.
Явный список заменяет defaults: если уже настроили свой список, добавьте нужные
пути туда. Для строгой прежней policy в JSON используйте `csi_important_payloads: []`;
эквивалентный явно непустой Lua-list без новых extensions:
`csi_important_payloads = { "{urn:xmpp:eme:0}encryption" }` (EME уже important).
Defaults увеличивают число немедленных доставок и возможных пробуждений клиента.
Старая importance function/native oracle сохранена; изменён именно runtime default.
На bind и resume применяется текущая конфигурация, включая сохранённые старые slots.
В6TLS fixtures:100000MAM/user, roster0/5000/10000,500durable pending, default/explicit[]:
все проверки прошли. Default inactive OMEMO legacy/2 —2.58–4.06мс,
receipts —7.36–35.56мс; при explicit[] сохраняется hold до active.
Headline buffering, EME delivery и точный счёт100523MAM records/user проверены.
Это XML/wire проверка доставки ciphertext, не проверка OMEMO криптографии клиента.
## Большой личный архив при входе
Bind2 и обычный MAM metadata IQ раньше декодировали все записи ради start/end.
На100000records,5samples:
| Операция | Старая медиана |0.8.2медиана |
|---|---:|---:|
|SASL2 Bind2 authenticate→success|2742.353мс|1.976мс|
|TCP/STARTTLS→Bind2 success|2745.115мс|3.565мс|
|MAM metadata IQ|2437.945мс|0.355мс|
Baseline0.8.0 содержит тот же прежний scan path; hash сохранён в raw report.
Новый edges_store читает ограниченные endpoint records под существующей блокировкой,
не создаёт/не требует index и восстанавливает partial append. Проверяются exact
IDs/timestamps. Это операция metadata, не проверка integrity всех промежуточных
записей. Полные MAM queries и периодическая очистка всё ещё могут читать архив.
## Проверка и диагностика
Новые scripts:
```bash
python3 tests/push_latency_network.py --binary target/release/rust-xmpp --recipient hibernating
python3 tests/push_latency_network.py --binary target/release/rust-xmpp --recipient offline
python3 tests/personal_message_latency_network.py --binary target/release/rust-xmpp
python3 tests/bind2_archive_latency_network.py --binary target/release/rust-xmpp --records 100000 --samples 5
```
Быстрые варианты включены в verify-local.sh и CI. Push fixture использует
loopback port5269; конфликт порта является ошибкой fixture. Global DNS/resolv.conf
не меняются; fixture использует special-use localhost и другой account domain.
`message-processing-slow` warning содержит duration_ms, route и correlation connection.
Оно фиксирует завершившуюся серверную обработку>250мс, без текста сообщения.
Если задержка остаётся, сопоставьте его с клиентским временем, типом transport,
CSI state, регистрацией push и внешней федерацией. Отсутствие warning не доказывает
отсутствие сетевого/клиентского ожидания до/после обработки.
SM Store пока использует общий mutex для durable slot IO; обязательный fsync
не отключён. Полные архивные запросы/maintenance, большие roster, медленный диск
и внешняя федерация имеют собственную стоимость. Производственная квалификация
клиентов и полная замена Prosody остаются за рамками этих fixtures.
Итоговые тесты/сырые отчёты: VALIDATION-0.8.2.md и validation-logs-0.8.2/.
+19 -9
View File
@@ -1,5 +1,8 @@
9c4e46e42c549436c503a4cd70f90efd8f7754ce8c2103a6d1352cd34174aac0 .github/workflows/ci.yml
06e1035f41aa02cd4d0fbc14db3160290f9e5384791c1b93f3268bc67aeee3e2 AGENTS.md
79f3f5cd46255826869c9151151d3471dd7139c2ea8fb2da4b2b6fbea113f0cf .github/workflows/ci.yml
d9732ba55b93d2907cd1a2a0fa20bc1f46e0f2970de0e9f2bf730048212cfc31 AGENTS.md
f8e6a12039b067ed5af42320bca42fb0555d9a5f438d1652860a5be4534469d1 Cargo.lock
4e8d7ee328f044be284e0cb436f13a468adcac3058bbb1be381f8bff96603e5a Cargo.toml
6be2fbcd1da8a07dda7daf3ddd727b38f363751ebace9c0b87c282f8961cffed Dockerfile
7136ea911bb6b6d352f703f80efeebde921028ea9dc39cd0d2cd55ea465f8c37 examples/config.json
8a65739eb5c24f10b9f2c509f0bd050fb1115706e6a41fdf804b9e0e44f583fd examples/config.toml
ca86274bcf4dc5daebbf69c9f003854afca92954719aff068f810e0a3d615dea examples/config.yaml
@@ -22,13 +25,13 @@ b1018e1b279c89f6cf14b4017e4f1b14e9165afef2f668cec6ac8bbe0c710d85 scripts/integr
e08ac6136cce27cda2ddbd510da0f25750766ab0150a9f4b8f87c953276d16e9 scripts/prosody_compat/oracle.lua
2c7a2c946885205e9df38b97305073a8ac72f58ac8ff84fc6f9af320c35bbc96 scripts/prosody_compat/verify.sh
1b9ed063daf3e0320819b4fe0135c96dd27e49877044aa2f5093b8ab4fbda41d scripts/smoke.py
caa74bdd83f0b952b875f613cdbd238d7f903408c2176d54178ce18994b53e95 scripts/verify-local.sh
c32bc7ed2d5f954a2b3de06db31fb1580378259edfc8ce574aa5cd5719cc2a59 scripts/verify-local.sh
a2e47f547ab9349f84ee6c4f8e51c147b7110b41a82c17cdb938027a84d82ef3 src/account_modules.rs
5637f816586f0613b83e14d0ed478bd539f325b70ccbfc9fdf893adbe494453d src/admin.rs
89d7e29d8f8daab614c9c836864b166fdaa324ca035c2d3d5f95639c24b2a9e1 src/archive.rs
7b844cbe377b057555436378ab8bd784f99b85e7c9992cb3c5a044f40326951f src/archive.rs
e15b079a420227ee59e3b7ac305783c51eb59d76a8fb5dd12760547b0f812107 src/auth.rs
83ac35a4c9d20debf006fe80fba8e423c09806fb2526ff384b188ca28d612a5e src/config.rs
55f8e68d0d41a81d2254a0c5aef4146488127f771c5b71ccd2e23d17dd1e8e79 src/csi.rs
175ab07f17ba14c51c76857c4905b0a587d8be68e2be5179456e9c71a523c487 src/csi.rs
834ebe4a1f2d46ab932c14c0a2c7be3375873a71ef56026d372c86e60ef041fc src/data_lock.rs
1c8aa5cb816a32a0f9f24589ac00beba27544a83c3d9aad771523a1d1cbcd4c8 src/extras.rs
dca8959effb123b94e1fbd42c561a79c721178c4b612a004db9f9fccb3b8950d src/federation.rs
@@ -41,8 +44,8 @@ c604a0a764ffac6bae0c9aa15c9ef7022d35cb1f8c9159eb66257114445621c5 src/http_trans
a21e1119ea0271b63935e92eb106ab6076f0035e6d3a06c21a352f152b9b37db src/logging.rs
58ce2a9daa36ac26b39c8f263a16f4fa8cc4e57c91bbbf5b24a6aad3f1a326e0 src/lua.rs
a264e2765a31c8c096462551aca229530cad356e39e338370d1a0bdd97860680 src/main.rs
71d5d185900b9cde190e10e2f28371cd5042d98b5900b4385d823f724234fced src/mam.rs
d8b69775bcdb01597bcaffa6123c636a226922f349beaa274fe77ff1e36bc5ef src/muc.rs
68d97d96aa3a370474c144ccfdbf16109c46a6b14123d55d30464237ae29a958 src/mam.rs
f17b06fe5b76381b5cdbfc2b668107f6c2b0b456c05b7a7709bea6a284531ff5 src/muc.rs
c7ba46a140b9dce65cc573176265d6f77049ae657a70ffe59611a1c0f3ef89af src/muc_admin.rs
ed2f07105ffeb80396aaf91c7a1fe9a8dc88d17235d03a0796372c1797c1506a src/muc_history.rs
636f6ea7ad7cc98390ac775a93b469d2f3e0f9e138be5bd1e256cad5037c7183 src/muc_recovery.rs
@@ -53,9 +56,9 @@ f09a6479b76c9c601a169b5f1f9cf1364e82df5ae27e4bab8d1b1428b5cad457 src/preauth.rs
8dbb7a6b43a5f0562a775df42a959ab8badc466135a8b32da86cd79615b5acbf src/pubsub.rs
913cd033f60a68f6c7cf9b3adbaf76db1c5c9bc88a0599196d373b16b64c0a1e src/push.rs
bec477f2520af6a9d7ca54e43eb12158b53e3cf09057653e504dfdeab956885e src/sasl.rs
9cfef150f88a08ee0cfb33b63b621e5ecd058daa08f19119379c099f9c7f7e7a src/server.rs
a445dcab6d0275861b08412a4bd622cb72c3f462ebba5eaedad360e740a6513c src/server.rs
c7450f9058528e3030df559840f87dae591a2b88be8503872956e9b78435d916 src/session_store.rs
a4e6faac3b5ab9b7e6e2c586387cb32d18a01fbd1ef65302cbc92ccbce934044 src/sessions.rs
1d4e890315886bc4fd0b824e034a5c1833a1f2c1347e8c3ca77254e13a2acab9 src/sessions.rs
71d7ce1036a091d8c27016ea7ce4cffedf904dfca9d1cc4891b7dc66a1e06a4e src/storage.rs
462b00edb2c1e02dd34524bafe4f82b5ef902028b44310ba31b085d31f4dc2aa src/tls_binding.rs
a78592aa79d8f01c22af1457d0c3f5922863ccd3e8ebb1aa05e043cc44579b8a src/upload_migration.rs
@@ -63,8 +66,10 @@ f9b023565711e0217238b53fb678c5fb14849cdcd2efcd0fce249018274fad69 src/wire.rs
b4eb7a230570dfde0fd0d301a6ace36559a5eae3e1402e42c76f014f61739c24 tests/_wire_client.py
45613ad6c53087a50c6c3a7969b30783578c334499bc6baceadb2d18b0b3ea4e tests/admin_socket.rs
0645fda01bede4362d998ef22aefdd2c02578dd2c2aae3878d0cff87b3679835 tests/android_sasl_network.py
ad225ade463f55bfd0734e67f5306e274cd9aab59e10e91469bf7263547cdf79 tests/archive_edges.rs
366b315521bd4f4448c0bac17bf74ddb77a728ff41fc48e29d46377625e0330f tests/archive_mam.rs
cb6b7bbcd1bc7ee01a4ccf892d4b6074765685c56c4b8bb46e0381b834577b6a tests/auth.rs
011bbdd00c8ff8b648076d133086c395f6784cdcbb0c9f4e1efcbc15c1e79d9c tests/bind2_archive_latency_network.py
b3c3470f0b9b64584abf98c26a4578b0b90089086d00f7b07187aa5f6db6a417 tests/cli.rs
cc58adbb0fc867802b09cf7bd0d25397a273e721fbd0d0cb0ce30c19e80c13a2 tests/config.rs
ba364e9ea561624b2c649cd0dda559e213c75e6d7080ae85f0c23f1f13d117e1 tests/csi.rs
@@ -83,6 +88,7 @@ f1ea3eb78d5c716f4281cf17cb41b9fb22e08dbb4cf08ed9c8477c79b7d2382b tests/http_pro
da2fc65e931ec74fbcdcd26d04f2cb073e2dc1e354139135166c79580973a477 tests/iq_errors.rs
05160f17f8098466a67c9b069c165dc9d94a84ab03a49896169f110baf8e869a tests/logging.rs
dfc3429e3e755d4c99ec1bd8ee6fb0f1f6aaf86414d5adaca7e9e3b18c7fe3f7 tests/logging_network.py
0141961eadf9246ce287d7ee0dbbbf5243fd6e1332e09ccd2f6a591be419c2c3 tests/message_latency_network.py
329ccbd4faee6cbbfa92d2fa0248844721b7ffc033baae4ec2570e9893f5df9f tests/message_routing.rs
1134fefd5bb75884b096b8542c4f9745e64fd5dfcf87a6bba8d665aad2185a8a tests/muc_access.rs
8120c66b85c0884619e39eea0b8761e11b41f2ed14c5be00146e35ca4714a9a0 tests/muc_crash_network.py
@@ -91,6 +97,7 @@ dfc3429e3e755d4c99ec1bd8ee6fb0f1f6aaf86414d5adaca7e9e3b18c7fe3f7 tests/logging_
1d06b769b59012732ba04497a995f4f54df127f58c5f4f264a5df99589f31a94 tests/muc_extensions.rs
a8a01faf51bf82bce6cbb2616cdaabb6337047d1c5f17d5f39975c0528a1d5ae tests/muc_flow.rs
b24bd920f096576c2009ff1ccc0366eb8734c5f0b2feb39f04ad7087268a94b9 tests/muc_history.rs
1b34ab721eec69295e1274e44bfd108c0e117dd383624cb6c98d851eb20e7a9a tests/muc_latency_storage.rs
1f3df5f3f39143adc2b2a419fac0cd74b2229337ffa86570261d1f6ac61137a1 tests/muc_native.rs
3df2736ccfd25a6cab290df80ceb7474ea44bb02af6cf768a9216d6b8f7f8630 tests/muc_optional_admin.rs
5dc93407a658b45e504b89e26cfc8f495cd28ad90d0a308b7d228a472435ff9f tests/muc_protocol.rs
@@ -106,6 +113,7 @@ dd68c50d7d7cfd7871f69331a2787e0336dcab73762a82c599cee2a39920ae95 tests/pep_diag
42b6c19d14e60b0c93193b4df473a0dd7cfcdb19250245ab94a7e1a237608395 tests/pep_item_order.rs
3e349f9219da20602a239a6c4ce71dc045faf9afb1c36599e2b41e90b2423508 tests/pep_notifications_network.py
83cea7164e5e6aadfc126b6b8349eb242bc113ba638385fa13c51ffda32aa57a tests/pep_order_network.py
08d1a1c5585dba862b78deddab59bd45282610afa58852b29ef56f3023a79de9 tests/personal_message_latency_network.py
6a078c3fbddff07131f3247d01fb1e13bc923888d93ea30175adda471cbece2f tests/preauth.rs
b4048d34620bd0726cfb79d4d1cca9635f27ca8e58c8ad61d619af63672a2e09 tests/preauth_native.rs
06a66caa73c179b9d3b239e6f4deac6fc876d8c8dfeafe302f043d85d9f4beb9 tests/preauth_network.py
@@ -113,6 +121,7 @@ fa1eae49717ca9fb8b118f40058dff0c068c8f28823ea1b0ac42fd0c3e935bda tests/pubsub_n
359de6dd2d960e63296f1109617f139bed2eac40409e50f72ff745897ba943ac tests/pubsub_persistence.rs
6fb7475ca7359ad870a83d5f143a1994c7bd34e9b56e275f7496ba8da291ee17 tests/push.rs
b8dd71798f96931f7ab4489cdb1e258556f41411815ef38d3a03e80e4e8fbdfc tests/push_discovery.py
44c8e642f725be2292dfc5282feac8772ac34824927b63058f03f7c98285e5b6 tests/push_latency_network.py
abf5e6a32ab542ccba5861eaaf7aed9a86b8306abfe2c329646d54e43176dc0c tests/reference/COPYING
1ecd0a5c122910cbd066922c95ff0c32e945a07e2c9b0a37a30e5f035b5ecea6 tests/reference/configmanager.lua
f407c6565fa73b6653e7e73204daa65ae1d87111e82c6b96154aea76497ad65d tests/reference_prosody.rs
@@ -125,6 +134,7 @@ ddd9d5b46dc943138a334c64477fb11970b3d45e4cfbeaafc7348754f1e5e29e tests/sasl_acc
a7d1519f4f44cc7bfad3d20bcfdf455e92abdd084feed493ffc9e0267a387740 tests/sasl_network.py
4748fa227743686f78a0fa0364735d2dda5995f8d70a79ad03c1aa1decb42978 tests/sasl_retry_network.py
d8882b8aabd6ff603c81fbbc259eefa68772afb2b3eec2e003ac29efd65d146b tests/sasl_web_network.py
7d69c14ced7884450b9a1ff63cd984cdb9dfe948d6c56631c7593b6fabdabf7f tests/session_routing_isolation.rs
d9eef5c37fcd99404619d61dbf7a2bf7673087924d93e69b08769e716afe297b tests/sm_durable_slots.rs
0b74b2ff47b8ae681b5613bc87e914fdf8e5033156180df06ff2174df2781a5a tests/sm_restart_network.py
72f2d60e47e5295b82d497289b78925a64a1d986c70c277015ae228d211d32bb tests/storage_accounts.rs
+48
View File
@@ -0,0 +1,48 @@
# Проверка 0.8.1
2026-10-21, Linux x86_64, Rust1.99.1. Итоговый **единый** прогон:
[verify.txt](validation-logs-0.8.1/verify.txt). Структурированный отчёт:
[validation-results.json](validation-results.json).
| Проверка | Результат |
|---|---|
| cargo tests |297 passed,0failed,11ignored в обычном наборе|
| fmt / Clippy all-targets -D warnings / release |Успешно|
| Новые структурные регрессии |2CSI mutation/rollback +2MUC archive scan/native export/retry — успешно|
| Сеть |Весь verify-local.sh, включая10MUC crash cases, SM restart/offline fanout, PEP/push, Android SASL, WSS/BOSH/proxy, upload/S3/migration — успешно|
| Native reference |8module/storage +1TLS/SASL EXTERNAL federation — успешно|
| Общая нагрузка |100accounts,500TLS,5000ping,5000messages,10000MAM,failures=[]|
| MUC+SM нагрузка |500resources,10rooms,25000presence,1500deliveries,SIGKILL и10resume — успешно|
| Latency regression |0/10000records в полном прогоне; отдельное сравнение0/1000/10000/100000 до/после — успешно|
MUC+SM connect 3.149с; join 25.54с;
весь сценарий 39.535с; выборочный peakRSS 41.25MiB.
100000записей, active CSI MUC peer: median 2517.940→4.680мс,
p95 2520.941→14.532мс. Inactive CSI median
3866.027→4.285мс. По3samples/state для большого архива;
это loopback измерение с проверкой точного количества MAM-записей, не production SLA.
Сырые samples: validation-logs-0.8.1/latency-*.json.
Причины и изменения: [MESSAGE-LATENCY.md](MESSAGE-LATENCY.md).
Release SHA-256: `c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977`. Baseline0.8.0 SHA-256:
`74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a`. Отчёты автоматически связывают результат с бинарником.
Повторение: `XMPP_LOAD_CHECK=1 bash scripts/verify-local.sh` с native env
по scripts/prosody_compat/README.md. Использованы CARGO_INCREMENTAL=0,
CARGO_PROFILE_DEV_DEBUG=0 и CARGO_PROFILE_TEST_DEBUG=0; native Lua-зависимости
из Ubuntu packages извлечены в частный /tmp prefix из-за ограничений среды.
Оригинальные compiled Prosody modules предоставленной ревизии сохранены.
Никакой fsync не отключён. Подтверждённые изменения MUC/SM остаются durable,
CSI queue mutation откатывается при ошибке записи. Старые crash/owner/token/h/
account deletion/recreation тесты проходят. Периодический maintenance и MAM
queries всё ещё работают с архивом; исправление устраняет scan на каждый append,
а не обещает постоянную стоимость любой архивной операции.
Ignored native9тестов выполнены отдельно внутри того же verify-local.sh.
Оставшиеся AF_UNIX admin и>128MiB archive tests по-прежнему входят в полный CI
entrypoint, но в этом локальном прогоне не запускались. Передачи10GiB не
повторялись: старые0.7.8/0.7.9отчёты не относятся к новой сборке.
Настоящие production клиенты, DNSSEC, APNs/FCM и полный Prosody parity этим
не подтверждаются. Общие пределы: [COMPATIBILITY.md](COMPATIBILITY.md).
+51
View File
@@ -0,0 +1,51 @@
# Проверка0.8.2
2026-10-21, Linux x86_64, Rust1.99.1. Итоговый единый прогон:
[verify.txt](validation-logs-0.8.2/verify.txt). Machine-readable report:
[validation-results.json](validation-results.json).
|Проверка|Результат|
|---|---|
|Rust ordinary tests|305passed,0failed,11ignored|
|fmt / Clippy all-targets -D warnings / release|Успешно|
|Новые Rust regressions|6archive endpoints/recovery/limits +2account-lock/duplicateACK — успешно|
|Личная доставка|6fixtures:100000MAM/user, roster0/5000/10000,500SMpending, default/native CSI — успешно|
|Неподвижный push gateway|Настоящий STARTTLS; hibernating+offline: bothmessagesdurable, senderACKh=4 до ответа gateway; offline сохранён до первого postTLSstream|
|Bind2 и MAM metadata|100000records,5reconnects+5IQ, exactIDs/timestamps — успешно|
|Сетевые регрессии|Весь verify-local.sh, включаяprivate WSS/BOSH chat, PEP/push,AndroidSASL,MUCcrash/SMrestart,S3/migration — успешно|
|Native reference|8module/storage +1TLS/SASL EXTERNAL federation — успешно|
|Общая нагрузка|500TLS,100accounts,5000ping,5000messages,10000MAM,failures=[]|
|MUC+SM нагрузка|500resources,10rooms,25000presence,1500messages,SIGKILL+10resume — успешно|
MUC+SM total 45.54с, peak sampled RSS 40.94MiB.
Воспроизведение личного push-stall: прежний0.8.1 за2с сохраняет только первое
сообщение и не отвечаетSMACK при зависшем postTLSfeatures gateway. Новый0.8.2
сохраняет оба и отвечаетh=4 в том же2сокне; тестовое окно не является latency SLA.
Offline ordering baseline проверен на0.8.0; его точный hash указан отдельно.
Bind2 authenticate→success median2742.353→1.976мс; metadataIQ2437.945→0.355мс.
Baseline0.8.0hash74882319… содержит тот же прежний scan path. Все raw samples,
IDs, timestamps и hashes — validation-logs-0.8.2/bind2-*.json.
Default inactive OMEMO доставлен за2.58–4.06мс, receipts7.36–35.56мс в checked
fixtures; explicit[] сохраняет удержание доactive. Намеренный CSI dwell2с
отдельно обозначен в отчёте и не выдаётся за время вычисления/доставки.
Каждый personalarchive содержит ровно100523records/user. Детали и настройка:
[PERSONAL-MESSAGE-LATENCY.md](PERSONAL-MESSAGE-LATENCY.md).
Release SHA-256: `130431025c4c7c2f72e28b77a31c83867f857ef8bb56d1f71b10e4b19d7caaf5`. Все новые final reports содержат этот hash.
Команда: `XMPP_LOAD_CHECK=1 bash scripts/verify-local.sh` с native env согласно
scripts/prosody_compat/README.md. Использованы CARGO_INCREMENTAL=0,
CARGO_PROFILE_DEV_DEBUG=0, CARGO_PROFILE_TEST_DEBUG=0. Перед итоговым прогоном
устранены stale package linker artifacts очисткой package build outputs;
исходники не менялись после финальной сборки. Воспроизведение прошло одним
последующим полным прогоном; preliminary compiler errors не являются test failures.
Это loopback, не production клиента/диска/сети. Fsync и durable commit до
подтверждения сохранены; boundedpushqueue не обещает durable notification delivery.
SMglobalIOmutex, полные MAMqueries и maintenance остаются отдельной стоимостью.
9nativeignoredtests выполнены; остальные AF_UNIX/largearchiveignoredtests и
10GiBtransfers в этом локальном прогоне не запускались (полный CI entrypoint
по-прежнему включает их). Старые largeupload результаты не приписываются0.8.2.
Общие границы: [COMPATIBILITY.md](COMPATIBILITY.md).
+42 -41
View File
@@ -1,50 +1,51 @@
# Проверка 0.8.0
# Проверка0.8.2
Linux x86_64, Rust1.99.1, 2026-10-20. Итоговый полный прогон:
[verify.txt](validation-logs-0.8.0/verify.txt).
Структурированный отчёт: [validation-results.json](validation-results.json).
2026-10-21, Linux x86_64, Rust1.99.1. Итоговый единый прогон:
[verify.txt](validation-logs-0.8.2/verify.txt). Machine-readable report:
[validation-results.json](validation-results.json).
| Проверка | Результат |
|Проверка|Результат|
|---|---|
| Rust tests | 293 passed, 0 failed, 11 ignored |
| fmt / Clippy all-targets -D warnings / release | Успешно |
| MUC SIGKILL через настоящий STARTTLS | temporary/persistent комнаты, несколько ресурсов, show/status/roles, порядок истории, подтверждённые leave/kick/demotion/password/config, фиксированный/custom grace — успешно |
| SM между процессами | SIGKILL/SIGTERM, legacy SASL/SASL2, counters, ack/replay, неверные owner/token/h, resource conflict — успешно |
| MUC offline fanout | До аутентификации Bob новое сообщение Alice уже в приватной durable SM-очереди; после resume доставка без history delay — успешно |
| Отзыв SM | Удаление аккаунта подтверждается; после повторного создания старый SM-токен отклоняется |
| MUC+SM нагрузка | 100 аккаунтов, 500 TLS-ресурсов, 10 комнат, 25000 join presence; SIGKILL и resume представителей всех комнат — успешно |
| Native reference | 8 module/storage + 1 TLS/SASL EXTERNAL federation — успешно |
| Остальные сетевые регрессии | Android SASL, WSS/BOSH/proxy/altconnect, PEP/push/preauth, resource policies, upload/S3/migration — успешно |
|Rust ordinary tests|305passed,0failed,11ignored|
|fmt / Clippy all-targets -D warnings / release|Успешно|
|Новые Rust regressions|6archive endpoints/recovery/limits +2account-lock/duplicateACK — успешно|
|Личная доставка|6fixtures:100000MAM/user, roster0/5000/10000,500SMpending, default/native CSI — успешно|
|Неподвижный push gateway|Настоящий STARTTLS; hibernating+offline: bothmessagesdurable, senderACKh=4 до ответа gateway; offline сохранён до первого postTLSstream|
|Bind2 и MAM metadata|100000records,5reconnects+5IQ, exactIDs/timestamps — успешно|
|Сетевые регрессии|Весь verify-local.sh, включаяprivate WSS/BOSH chat, PEP/push,AndroidSASL,MUCcrash/SMrestart,S3/migration — успешно|
|Native reference|8module/storage +1TLS/SASL EXTERNAL federation — успешно|
|Общая нагрузка|500TLS,100accounts,5000ping,5000messages,10000MAM,failures=[]|
|MUC+SM нагрузка|500resources,10rooms,25000presence,1500messages,SIGKILL+10resume — успешно|
Нагрузка MUC+SM: connect 5.193 с; join 46.703 с;
полный сценарий 78.857 с; выборочный peak RSS 41.26 MiB.
Детали fanout, CPU, slots и replay: [muc-sm-load.json](validation-logs-0.8.0/muc-sm-load.json).
Это loopback smoke measurement, а не гарантия production capacity.
MUC+SM total 45.54с, peak sampled RSS 40.94MiB.
SHA-256 итоговой release-сборки: `74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a`.
Основной прогон: `XMPP_LOAD_CHECK=1 bash scripts/verify-local.sh`; native env описан
в scripts/prosody_compat/README.md. В этой среде дополнительно применены
CARGO_INCREMENTAL=0, CARGO_PROFILE_DEV_DEBUG=0, CARGO_PROFILE_TEST_DEBUG=0.
Воспроизведение личного push-stall: прежний0.8.1 за2с сохраняет только первое
сообщение и не отвечаетSMACK при зависшем postTLSfeatures gateway. Новый0.8.2
сохраняет оба и отвечаетh=4 в том же2сокне; тестовое окно не является latency SLA.
Offline ordering baseline проверен на0.8.0; его точный hash указан отдельно.
Первый основной прогон остановился на пятисекундном readiness timeout нового
нагрузочного теста после успешных обычных и сетевых проверок. В самом тесте
таймаут увеличен до60секунд; нагрузка500 повторена с той же release-сборкой,
а native-проверки выполнены отдельно. verify.txt объединяет успешные части
этих запусков; первоначальный лог сохранён в initial-load-timeout.txt.
Bind2 authenticate→success median2742.353→1.976мс; metadataIQ2437.945→0.355мс.
Baseline0.8.0hash74882319… содержит тот же прежний scan path. Все raw samples,
IDs, timestamps и hashes — validation-logs-0.8.2/bind2-*.json.
В процессе проверки исправлены потеря сохранённых presence/history, защита
истёкших recovery claims, отсутствие успешного ответа при удалении аккаунта,
учёт stanza до SM enable и потеря MUC fanout до подключения другого участника.
Первоначальный тест последнего случая принимал позднюю историю за доставку;
итоговый тест проверяет именно private pending queue до аутентификации.
Default inactive OMEMO доставлен за2.58–4.06мс, receipts7.36–35.56мс в checked
fixtures; explicit[] сохраняет удержание доactive. Намеренный CSI dwell2с
отдельно обозначен в отчёте и не выдаётся за время вычисления/доставки.
Каждый personalarchive содержит ровно100523records/user. Детали и настройка:
[PERSONAL-MESSAGE-LATENCY.md](PERSONAL-MESSAGE-LATENCY.md).
Реальные TCP/TLS-сокеты после завершения процесса отсутствуют: требуется новое
защищённое аутентифицированное соединение. SM допускает повторную доставку при
неопределённом сетевом результате; это не exactly-once транзакция между всеми
хранилищами и сетью. Известные встроенные возможности MUC перенесены, произвольные
community Lua-модули не исполняются. Пределы записей и порядок восстановления:
[MUC-RECOVERY.md](MUC-RECOVERY.md). Полная замена всей установки и проверка
реальными клиентами этим не заявляются: [COMPATIBILITY.md](COMPATIBILITY.md).
Release SHA-256: `130431025c4c7c2f72e28b77a31c83867f857ef8bb56d1f71b10e4b19d7caaf5`. Все новые final reports содержат этот hash.
Команда: `XMPP_LOAD_CHECK=1 bash scripts/verify-local.sh` с native env согласно
scripts/prosody_compat/README.md. Использованы CARGO_INCREMENTAL=0,
CARGO_PROFILE_DEV_DEBUG=0, CARGO_PROFILE_TEST_DEBUG=0. Перед итоговым прогоном
устранены stale package linker artifacts очисткой package build outputs;
исходники не менялись после финальной сборки. Воспроизведение прошло одним
последующим полным прогоном; preliminary compiler errors не являются test failures.
10GiB upload в0.8.0 не повторялся. Исторические испытания local/MinIO находятся
в VALIDATION-0.7.8.md и VALIDATION-0.7.9.md; их результаты не приписываются новой сборке.
Это loopback, не production клиента/диска/сети. Fsync и durable commit до
подтверждения сохранены; boundedpushqueue не обещает durable notification delivery.
SMglobalIOmutex, полные MAMqueries и maintenance остаются отдельной стоимостью.
9nativeignoredtests выполнены; остальные AF_UNIX/largearchiveignoredtests и
10GiBtransfers в этом локальном прогоне не запускались (полный CI entrypoint
по-прежнему включает их). Старые largeupload результаты не приписываются0.8.2.
Общие границы: [COMPATIBILITY.md](COMPATIBILITY.md).
@@ -0,0 +1,232 @@
{
"binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"scope": "loopback STARTTLS; isolated fixture; no production latency claim",
"cases": [
{
"mam_enabled": false,
"sm_enabled": true,
"rounds": 3,
"seeded_muc_archive_records": 0,
"active": {
"direct_peer": {
"samples": 3,
"median_ms": 2.188561000025402,
"p95_ms": 2.3107499999923675,
"max_ms": 2.3107499999923675,
"samples_ms": [
2.0956669999350197,
2.188561000025402,
2.3107499999923675
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 4.38233800002763,
"p95_ms": 4.56658600000992,
"max_ms": 4.56658600000992,
"samples_ms": [
4.381051999985175,
4.38233800002763,
4.56658600000992
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 3.617779000023802,
"p95_ms": 3.788068999938332,
"max_ms": 3.788068999938332,
"samples_ms": [
3.264654999952654,
3.617779000023802,
3.788068999938332
]
},
"muc_peer": {
"samples": 3,
"median_ms": 3.8124090000337674,
"p95_ms": 3.8366489999361875,
"max_ms": 3.8366489999361875,
"samples_ms": [
3.3308939999869835,
3.8124090000337674,
3.8366489999361875
]
}
},
"inactive": {
"direct_peer": {
"samples": 3,
"median_ms": 2.189512999962062,
"p95_ms": 2.2236539999767047,
"max_ms": 2.2236539999767047,
"samples_ms": [
2.1697740000945487,
2.189512999962062,
2.2236539999767047
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 4.169533999970554,
"p95_ms": 4.451736999953937,
"max_ms": 4.451736999953937,
"samples_ms": [
4.0612270000792705,
4.169533999970554,
4.451736999953937
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 3.311576999976751,
"p95_ms": 4.169272000012825,
"max_ms": 4.169272000012825,
"samples_ms": [
3.2493040000645124,
3.311576999976751,
4.169272000012825
]
},
"muc_peer": {
"samples": 3,
"median_ms": 3.372077999983958,
"p95_ms": 4.188992999957009,
"max_ms": 4.188992999957009,
"samples_ms": [
3.315083000074992,
3.372077999983958,
4.188992999957009
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 3.6135210000338702,
"p95_ms": 3.6135210000338702,
"max_ms": 3.6135210000338702,
"samples_ms": [
3.6135210000338702
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 0,
"muc_archive_records": 0,
"wire_body_deliveries": 27,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 3,
"seeded_muc_archive_records": 100000,
"active": {
"direct_peer": {
"samples": 3,
"median_ms": 4.533615000013924,
"p95_ms": 4.635108000002219,
"max_ms": 4.635108000002219,
"samples_ms": [
3.9327949999687917,
4.533615000013924,
4.635108000002219
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 8.584756000004745,
"p95_ms": 9.454648999962956,
"max_ms": 9.454648999962956,
"samples_ms": [
8.391761999973824,
8.584756000004745,
9.454648999962956
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 4.660852999904819,
"p95_ms": 14.45046399999228,
"max_ms": 14.45046399999228,
"samples_ms": [
4.372101999933875,
4.660852999904819,
14.45046399999228
]
},
"muc_peer": {
"samples": 3,
"median_ms": 4.680227999983799,
"p95_ms": 14.532127000052242,
"max_ms": 14.532127000052242,
"samples_ms": [
4.40479399992455,
4.680227999983799,
14.532127000052242
]
}
},
"inactive": {
"direct_peer": {
"samples": 3,
"median_ms": 5.005547999985538,
"p95_ms": 5.457555000020875,
"max_ms": 5.457555000020875,
"samples_ms": [
4.749896000021181,
5.005547999985538,
5.457555000020875
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 9.33329400004368,
"p95_ms": 9.77378499999304,
"max_ms": 9.77378499999304,
"samples_ms": [
8.875206999960028,
9.33329400004368,
9.77378499999304
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 4.230191000033301,
"p95_ms": 5.015898000010566,
"max_ms": 5.015898000010566,
"samples_ms": [
4.2100000000573345,
4.230191000033301,
5.015898000010566
]
},
"muc_peer": {
"samples": 3,
"median_ms": 4.284876000042459,
"p95_ms": 5.071866999969643,
"max_ms": 5.071866999969643,
"samples_ms": [
4.257245000076182,
4.284876000042459,
5.071866999969643
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 5.098277999991296,
"p95_ms": 5.098277999991296,
"max_ms": 5.098277999991296,
"samples_ms": [
5.098277999991296
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 26,
"muc_archive_records": 100006,
"wire_body_deliveries": 27,
"status": "pass"
}
]
}
@@ -0,0 +1,232 @@
{
"binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"scope": "loopback STARTTLS; isolated fixture; no production latency claim",
"cases": [
{
"mam_enabled": false,
"sm_enabled": true,
"rounds": 3,
"seeded_muc_archive_records": 0,
"active": {
"direct_peer": {
"samples": 3,
"median_ms": 4.910238999968897,
"p95_ms": 5.052589999991142,
"max_ms": 5.052589999991142,
"samples_ms": [
4.849958000022525,
4.910238999968897,
5.052589999991142
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 9.99482099996385,
"p95_ms": 10.185542000044734,
"max_ms": 10.185542000044734,
"samples_ms": [
9.438553999984833,
9.99482099996385,
10.185542000044734
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 7.185058999993998,
"p95_ms": 7.319806000054996,
"max_ms": 7.319806000054996,
"samples_ms": [
5.824679000056676,
7.185058999993998,
7.319806000054996
]
},
"muc_peer": {
"samples": 3,
"median_ms": 7.9024159999789845,
"p95_ms": 8.338388999959534,
"max_ms": 8.338388999959534,
"samples_ms": [
6.551824999974087,
7.9024159999789845,
8.338388999959534
]
}
},
"inactive": {
"direct_peer": {
"samples": 3,
"median_ms": 6.445996999900672,
"p95_ms": 7.172110000055909,
"max_ms": 7.172110000055909,
"samples_ms": [
4.87915000007888,
6.445996999900672,
7.172110000055909
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 10.659646999897632,
"p95_ms": 12.850071000002572,
"max_ms": 12.850071000002572,
"samples_ms": [
9.232021000002533,
10.659646999897632,
12.850071000002572
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 9.392836000074567,
"p95_ms": 14.882106999948519,
"max_ms": 14.882106999948519,
"samples_ms": [
5.741209000007075,
9.392836000074567,
14.882106999948519
]
},
"muc_peer": {
"samples": 3,
"median_ms": 10.40252400002828,
"p95_ms": 16.07552799998757,
"max_ms": 16.07552799998757,
"samples_ms": [
6.522893999999724,
10.40252400002828,
16.07552799998757
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 6.09094300000379,
"p95_ms": 6.09094300000379,
"max_ms": 6.09094300000379,
"samples_ms": [
6.09094300000379
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 0,
"muc_archive_records": 0,
"wire_body_deliveries": 27,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 3,
"seeded_muc_archive_records": 100000,
"active": {
"direct_peer": {
"samples": 3,
"median_ms": 8.917705999920145,
"p95_ms": 10.107052999956068,
"max_ms": 10.107052999956068,
"samples_ms": [
8.420038000053864,
8.917705999920145,
10.107052999956068
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 16.42384999991009,
"p95_ms": 17.16581000005135,
"max_ms": 17.16581000005135,
"samples_ms": [
16.391191000025174,
16.42384999991009,
17.16581000005135
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 2517.3544539999284,
"p95_ms": 2520.2535930000067,
"max_ms": 2520.2535930000067,
"samples_ms": [
2501.2779300000147,
2517.3544539999284,
2520.2535930000067
]
},
"muc_peer": {
"samples": 3,
"median_ms": 2517.9402029999665,
"p95_ms": 2520.940784000004,
"max_ms": 2520.940784000004,
"samples_ms": [
2502.2604349999256,
2517.9402029999665,
2520.940784000004
]
}
},
"inactive": {
"direct_peer": {
"samples": 3,
"median_ms": 24.452612999994017,
"p95_ms": 26.775254999961362,
"max_ms": 26.775254999961362,
"samples_ms": [
8.767078000005313,
24.452612999994017,
26.775254999961362
]
},
"direct_application_rtt": {
"samples": 3,
"median_ms": 36.83773900002052,
"p95_ms": 50.86929899994175,
"max_ms": 50.86929899994175,
"samples_ms": [
17.80327500000567,
36.83773900002052,
50.86929899994175
]
},
"muc_sender_echo": {
"samples": 3,
"median_ms": 3855.8298680000007,
"p95_ms": 4150.020520999988,
"max_ms": 4150.020520999988,
"samples_ms": [
2901.40261199997,
3855.8298680000007,
4150.020520999988
]
},
"muc_peer": {
"samples": 3,
"median_ms": 3866.027479999957,
"p95_ms": 4150.866962999999,
"max_ms": 4150.866962999999,
"samples_ms": [
2901.4587140000003,
3866.027479999957,
4150.866962999999
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 22.82110700002704,
"p95_ms": 22.82110700002704,
"max_ms": 22.82110700002704,
"samples_ms": [
22.82110700002704
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 26,
"muc_archive_records": 100006,
"wire_body_deliveries": 27,
"status": "pass"
}
]
}
@@ -0,0 +1,522 @@
{
"binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"scope": "loopback STARTTLS; isolated fixture; no production latency claim",
"cases": [
{
"mam_enabled": false,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 0,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 2.2083669999801714,
"p95_ms": 2.7524509999921065,
"max_ms": 2.7524509999921065,
"samples_ms": [
2.0349779999833117,
2.1022979999543168,
2.2083669999801714,
2.581427999984953,
2.7524509999921065
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 4.559320999987904,
"p95_ms": 5.448408999995991,
"max_ms": 5.448408999995991,
"samples_ms": [
3.9975349999394894,
4.301345000044421,
4.559320999987904,
4.565895999917302,
5.448408999995991
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 4.29816700000174,
"p95_ms": 11.835469999937231,
"max_ms": 11.835469999937231,
"samples_ms": [
3.717826999945828,
3.95383000000038,
4.29816700000174,
11.782627000002321,
11.835469999937231
]
},
"muc_peer": {
"samples": 5,
"median_ms": 4.366868000033719,
"p95_ms": 11.859378999929504,
"max_ms": 11.859378999929504,
"samples_ms": [
3.7456439999914437,
4.002205000006143,
4.366868000033719,
11.841935000006742,
11.859378999929504
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 2.1559959999422063,
"p95_ms": 2.7428159999089985,
"max_ms": 2.7428159999089985,
"samples_ms": [
1.889266000034695,
2.07170299995596,
2.1559959999422063,
2.2102450000147655,
2.7428159999089985
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 4.291513999987728,
"p95_ms": 4.628346999993482,
"max_ms": 4.628346999993482,
"samples_ms": [
4.097702999956709,
4.117672000006678,
4.291513999987728,
4.321024999967449,
4.628346999993482
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 3.607771000019966,
"p95_ms": 4.329054999971049,
"max_ms": 4.329054999971049,
"samples_ms": [
3.0511659999774565,
3.3668879999595447,
3.607771000019966,
3.629876999980297,
4.329054999971049
]
},
"muc_peer": {
"samples": 5,
"median_ms": 3.669854000008854,
"p95_ms": 4.375101999926301,
"max_ms": 4.375101999926301,
"samples_ms": [
3.109387999984392,
3.436124000018026,
3.669854000008854,
3.692369999953371,
4.375101999926301
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 3.450391999990643,
"p95_ms": 3.450391999990643,
"max_ms": 3.450391999990643,
"samples_ms": [
3.450391999990643
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 0,
"muc_archive_records": 0,
"wire_body_deliveries": 43,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 0,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 5.680922999999893,
"p95_ms": 5.92475899998135,
"max_ms": 5.92475899998135,
"samples_ms": [
4.959245000009105,
5.657132000010279,
5.680922999999893,
5.683216000079483,
5.92475899998135
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 10.62067800000932,
"p95_ms": 11.266418999980488,
"max_ms": 11.266418999980488,
"samples_ms": [
9.56820900000821,
10.354214000017237,
10.62067800000932,
11.083625999958713,
11.266418999980488
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 4.932548000056158,
"p95_ms": 7.615871999973933,
"max_ms": 7.615871999973933,
"samples_ms": [
4.048796000006405,
4.207175000033203,
4.932548000056158,
5.545106999989002,
7.615871999973933
]
},
"muc_peer": {
"samples": 5,
"median_ms": 5.05425800008652,
"p95_ms": 7.6429759999427915,
"max_ms": 7.6429759999427915,
"samples_ms": [
4.07517700000426,
4.236438000020826,
5.05425800008652,
5.570927000007941,
7.6429759999427915
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 5.44478100005108,
"p95_ms": 5.556554000008873,
"max_ms": 5.556554000008873,
"samples_ms": [
4.727472000013222,
4.8114250000708125,
5.44478100005108,
5.505089000052976,
5.556554000008873
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 10.183787000073607,
"p95_ms": 10.890477999964787,
"max_ms": 10.890477999964787,
"samples_ms": [
9.888724000006732,
9.945942000058494,
10.183787000073607,
10.306656000011571,
10.890477999964787
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 5.1263200000448705,
"p95_ms": 5.255117000046994,
"max_ms": 5.255117000046994,
"samples_ms": [
4.305390000013176,
5.036372000063238,
5.1263200000448705,
5.168275000073663,
5.255117000046994
]
},
"muc_peer": {
"samples": 5,
"median_ms": 5.184012999961851,
"p95_ms": 5.310040000040317,
"max_ms": 5.310040000040317,
"samples_ms": [
4.368295000062972,
5.154129000061403,
5.184012999961851,
5.191530000047351,
5.310040000040317
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 5.2187170000479455,
"p95_ms": 5.2187170000479455,
"max_ms": 5.2187170000479455,
"samples_ms": [
5.2187170000479455
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 42,
"muc_archive_records": 10,
"wire_body_deliveries": 43,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 1000,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 5.179283999950712,
"p95_ms": 5.702402999986589,
"max_ms": 5.702402999986589,
"samples_ms": [
4.691908000040712,
5.172169999923426,
5.179283999950712,
5.635785999970722,
5.702402999986589
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 9.836759999984679,
"p95_ms": 10.818348000043443,
"max_ms": 10.818348000043443,
"samples_ms": [
9.177894999993441,
9.73506099990118,
9.836759999984679,
10.593198000037773,
10.818348000043443
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 4.2178580000609145,
"p95_ms": 6.532151999977032,
"max_ms": 6.532151999977032,
"samples_ms": [
3.8601360000711793,
4.174319999947329,
4.2178580000609145,
4.571829000042271,
6.532151999977032
]
},
"muc_peer": {
"samples": 5,
"median_ms": 4.280302000097436,
"p95_ms": 6.605132999993657,
"max_ms": 6.605132999993657,
"samples_ms": [
3.8853840000001583,
4.233521999935874,
4.280302000097436,
4.673529000001508,
6.605132999993657
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 5.289302999926804,
"p95_ms": 5.9182850000070175,
"max_ms": 5.9182850000070175,
"samples_ms": [
4.637428000023647,
4.646944000000985,
5.289302999926804,
5.336470000088411,
5.9182850000070175
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 9.881779000011193,
"p95_ms": 11.126878000027318,
"max_ms": 11.126878000027318,
"samples_ms": [
9.666927000012038,
9.780869999985953,
9.881779000011193,
9.893610999938574,
11.126878000027318
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 5.337903999929949,
"p95_ms": 6.605088000014803,
"max_ms": 6.605088000014803,
"samples_ms": [
4.4430670000110695,
4.566451999949095,
5.337903999929949,
5.398619999937182,
6.605088000014803
]
},
"muc_peer": {
"samples": 5,
"median_ms": 5.365761999996721,
"p95_ms": 6.657663000055436,
"max_ms": 6.657663000055436,
"samples_ms": [
4.503487999954814,
4.589735999957156,
5.365761999996721,
5.456013999946663,
6.657663000055436
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 6.4426129999901605,
"p95_ms": 6.4426129999901605,
"max_ms": 6.4426129999901605,
"samples_ms": [
6.4426129999901605
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 42,
"muc_archive_records": 1010,
"wire_body_deliveries": 43,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 10000,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 5.5639299999938885,
"p95_ms": 6.427136000070277,
"max_ms": 6.427136000070277,
"samples_ms": [
4.3693179999308995,
5.252241999983198,
5.5639299999938885,
6.115242999953807,
6.427136000070277
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 10.580320000030952,
"p95_ms": 11.34455600004003,
"max_ms": 11.34455600004003,
"samples_ms": [
8.862616999977035,
10.534624999991138,
10.580320000030952,
10.863696000001255,
11.34455600004003
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 4.871052999988024,
"p95_ms": 6.248740000046382,
"max_ms": 6.248740000046382,
"samples_ms": [
4.298133000020243,
4.364993999956823,
4.871052999988024,
5.0552000000152475,
6.248740000046382
]
},
"muc_peer": {
"samples": 5,
"median_ms": 4.894828000033158,
"p95_ms": 6.306694000045354,
"max_ms": 6.306694000045354,
"samples_ms": [
4.328496999960407,
4.393286999970769,
4.894828000033158,
5.0838870000688985,
6.306694000045354
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 4.837865000013153,
"p95_ms": 6.154906000006122,
"max_ms": 6.154906000006122,
"samples_ms": [
4.644825000013952,
4.6781300000020565,
4.837865000013153,
6.011097999930826,
6.154906000006122
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 9.839443999908326,
"p95_ms": 11.105878999956076,
"max_ms": 11.105878999956076,
"samples_ms": [
9.05296900009489,
9.732880000001387,
9.839443999908326,
10.890076000009685,
11.105878999956076
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 4.868799000064428,
"p95_ms": 5.506852999928924,
"max_ms": 5.506852999928924,
"samples_ms": [
4.652097999951366,
4.654195000057371,
4.868799000064428,
5.197563999900012,
5.506852999928924
]
},
"muc_peer": {
"samples": 5,
"median_ms": 4.921641999999338,
"p95_ms": 5.567783999936182,
"max_ms": 5.567783999936182,
"samples_ms": [
4.707422999899791,
4.71425300008832,
4.921641999999338,
5.261014999973668,
5.567783999936182
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 6.844148000027417,
"p95_ms": 6.844148000027417,
"max_ms": 6.844148000027417,
"samples_ms": [
6.844148000027417
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 42,
"muc_archive_records": 10010,
"wire_body_deliveries": 43,
"status": "pass"
}
]
}
@@ -0,0 +1,522 @@
{
"binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"scope": "loopback STARTTLS; isolated fixture; no production latency claim",
"cases": [
{
"mam_enabled": false,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 0,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 5.10814599999776,
"p95_ms": 6.436508999968282,
"max_ms": 6.436508999968282,
"samples_ms": [
4.687508000017715,
5.018378999977813,
5.10814599999776,
5.499873000019306,
6.436508999968282
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 10.949089000007461,
"p95_ms": 11.194100000011531,
"max_ms": 11.194100000011531,
"samples_ms": [
9.188771000026463,
9.251739999967867,
10.949089000007461,
11.097223999968264,
11.194100000011531
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 6.3955159999977695,
"p95_ms": 10.028454999996939,
"max_ms": 10.028454999996939,
"samples_ms": [
5.6768890000284955,
6.070047000036993,
6.3955159999977695,
6.783154999993712,
10.028454999996939
]
},
"muc_peer": {
"samples": 5,
"median_ms": 7.227664999959416,
"p95_ms": 10.73728499994786,
"max_ms": 10.73728499994786,
"samples_ms": [
6.249474000014743,
6.710089000023345,
7.227664999959416,
7.554007000010188,
10.73728499994786
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 4.543079999962174,
"p95_ms": 5.169351999995797,
"max_ms": 5.169351999995797,
"samples_ms": [
3.9885659999754353,
4.165818999979365,
4.543079999962174,
4.987367000012455,
5.169351999995797
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 9.515092000015102,
"p95_ms": 12.47698700001365,
"max_ms": 12.47698700001365,
"samples_ms": [
8.106691999955729,
8.858637999992425,
9.515092000015102,
9.874779000028866,
12.47698700001365
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 5.794529000013426,
"p95_ms": 7.275404999973034,
"max_ms": 7.275404999973034,
"samples_ms": [
5.51126799996382,
5.724920000034217,
5.794529000013426,
6.444504000000961,
7.275404999973034
]
},
"muc_peer": {
"samples": 5,
"median_ms": 6.479804000036893,
"p95_ms": 8.207588000004762,
"max_ms": 8.207588000004762,
"samples_ms": [
6.077395999966484,
6.479181999964112,
6.479804000036893,
7.2692859999961,
8.207588000004762
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 4.576559000042835,
"p95_ms": 4.576559000042835,
"max_ms": 4.576559000042835,
"samples_ms": [
4.576559000042835
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 0,
"muc_archive_records": 0,
"wire_body_deliveries": 43,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 0,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 8.454973000027621,
"p95_ms": 9.086850000016966,
"max_ms": 9.086850000016966,
"samples_ms": [
7.875873999978467,
7.919512999990275,
8.454973000027621,
8.744820000003983,
9.086850000016966
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 15.02084100002321,
"p95_ms": 18.49304000000984,
"max_ms": 18.49304000000984,
"samples_ms": [
14.658381000003828,
15.0033279999775,
15.02084100002321,
16.241458000024522,
18.49304000000984
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 8.695557000010012,
"p95_ms": 10.132943000030536,
"max_ms": 10.132943000030536,
"samples_ms": [
6.247895000001336,
8.190369000033115,
8.695557000010012,
8.886856000003718,
10.132943000030536
]
},
"muc_peer": {
"samples": 5,
"median_ms": 9.425391000036143,
"p95_ms": 11.220557999990888,
"max_ms": 11.220557999990888,
"samples_ms": [
6.928168999991158,
9.00288799999771,
9.425391000036143,
9.836486999972749,
11.220557999990888
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 8.574552000027325,
"p95_ms": 11.412799000027007,
"max_ms": 11.412799000027007,
"samples_ms": [
7.429673999979514,
8.434421999993447,
8.574552000027325,
10.991448000027049,
11.412799000027007
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 16.801955000005364,
"p95_ms": 20.960896000019602,
"max_ms": 20.960896000019602,
"samples_ms": [
15.289625999969303,
16.07350099999394,
16.801955000005364,
19.067943000038667,
20.960896000019602
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 9.673966000036671,
"p95_ms": 10.545491000016227,
"max_ms": 10.545491000016227,
"samples_ms": [
8.954777999974795,
9.244574000035755,
9.673966000036671,
10.407988999986628,
10.545491000016227
]
},
"muc_peer": {
"samples": 5,
"median_ms": 10.7329940000227,
"p95_ms": 11.54250500002263,
"max_ms": 11.54250500002263,
"samples_ms": [
9.77221699997699,
10.012581000012233,
10.7329940000227,
11.414449999961107,
11.54250500002263
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 8.784937999962494,
"p95_ms": 8.784937999962494,
"max_ms": 8.784937999962494,
"samples_ms": [
8.784937999962494
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 42,
"muc_archive_records": 10,
"wire_body_deliveries": 43,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 1000,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 7.590319999962958,
"p95_ms": 8.892007999975249,
"max_ms": 8.892007999975249,
"samples_ms": [
5.31427799995754,
6.9214119999969625,
7.590319999962958,
7.624421999992137,
8.892007999975249
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 13.376056000026892,
"p95_ms": 15.464272999963669,
"max_ms": 15.464272999963669,
"samples_ms": [
12.23329399999784,
13.25195099997245,
13.376056000026892,
14.078856999958589,
15.464272999963669
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 31.94280399998206,
"p95_ms": 35.83487499997773,
"max_ms": 35.83487499997773,
"samples_ms": [
30.683405999980096,
31.05138800003715,
31.94280399998206,
34.427220999987185,
35.83487499997773
]
},
"muc_peer": {
"samples": 5,
"median_ms": 32.718170999999074,
"p95_ms": 36.99477299994669,
"max_ms": 36.99477299994669,
"samples_ms": [
31.32484000002478,
31.708390999995117,
32.718170999999074,
35.15474099998528,
36.99477299994669
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 6.955795000010312,
"p95_ms": 7.9194580000034875,
"max_ms": 7.9194580000034875,
"samples_ms": [
6.15931200002251,
6.666912000014236,
6.955795000010312,
7.675652999978411,
7.9194580000034875
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 13.159411000003729,
"p95_ms": 15.27061000001595,
"max_ms": 15.27061000001595,
"samples_ms": [
12.274962999981653,
13.057566999975734,
13.159411000003729,
14.08330199996044,
15.27061000001595
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 34.13865300001362,
"p95_ms": 36.99340499997561,
"max_ms": 36.99340499997561,
"samples_ms": [
30.982952999977442,
32.71812099995941,
34.13865300001362,
35.38880100001052,
36.99340499997561
]
},
"muc_peer": {
"samples": 5,
"median_ms": 36.06873300003599,
"p95_ms": 38.31650299997591,
"max_ms": 38.31650299997591,
"samples_ms": [
33.48175599995784,
34.2965520000007,
36.06873300003599,
36.353186000042115,
38.31650299997591
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 12.115028999971855,
"p95_ms": 12.115028999971855,
"max_ms": 12.115028999971855,
"samples_ms": [
12.115028999971855
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 42,
"muc_archive_records": 1010,
"wire_body_deliveries": 43,
"status": "pass"
},
{
"mam_enabled": true,
"sm_enabled": true,
"rounds": 5,
"seeded_muc_archive_records": 10000,
"active": {
"direct_peer": {
"samples": 5,
"median_ms": 9.04404400000658,
"p95_ms": 12.927059999981338,
"max_ms": 12.927059999981338,
"samples_ms": [
8.594286000004558,
9.04279899998528,
9.04404400000658,
10.732668000002832,
12.927059999981338
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 18.81452300000319,
"p95_ms": 21.198468999955367,
"max_ms": 21.198468999955367,
"samples_ms": [
17.06366100000878,
17.834419999985585,
18.81452300000319,
18.89581300002874,
21.198468999955367
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 258.5251909999897,
"p95_ms": 269.03445800002146,
"max_ms": 269.03445800002146,
"samples_ms": [
243.74590799999396,
244.56996899999695,
258.5251909999897,
260.5109279999738,
269.03445800002146
]
},
"muc_peer": {
"samples": 5,
"median_ms": 259.47216499997694,
"p95_ms": 269.0669140000068,
"max_ms": 269.0669140000068,
"samples_ms": [
244.58446500000264,
245.61970199999905,
259.47216499997694,
261.3186459999497,
269.0669140000068
]
}
},
"inactive": {
"direct_peer": {
"samples": 5,
"median_ms": 9.321043999989342,
"p95_ms": 11.691385000005994,
"max_ms": 11.691385000005994,
"samples_ms": [
9.130955999978596,
9.257138999998915,
9.321043999989342,
9.393109000029654,
11.691385000005994
]
},
"direct_application_rtt": {
"samples": 5,
"median_ms": 22.537706999969487,
"p95_ms": 22.7979030000256,
"max_ms": 22.7979030000256,
"samples_ms": [
18.378415999961817,
18.92694800000072,
22.537706999969487,
22.614556000007724,
22.7979030000256
]
},
"muc_sender_echo": {
"samples": 5,
"median_ms": 257.6139750000266,
"p95_ms": 278.14462699996056,
"max_ms": 278.14462699996056,
"samples_ms": [
248.2455429999959,
251.84251700000004,
257.6139750000266,
262.41991000000553,
278.14462699996056
]
},
"muc_peer": {
"samples": 5,
"median_ms": 258.46415800003797,
"p95_ms": 278.8930929999651,
"max_ms": 278.8930929999651,
"samples_ms": [
250.01428399997394,
253.1065140000237,
258.46415800003797,
263.1856349999566,
278.8930929999651
]
}
},
"urgent_flush": {
"samples": 1,
"median_ms": 11.461830000030204,
"p95_ms": 11.461830000030204,
"max_ms": 11.461830000030204,
"samples_ms": [
11.461830000030204
]
},
"headline_durably_buffered": true,
"activation_drained_queue": true,
"personal_archive_records": 42,
"muc_archive_records": 10010,
"wire_body_deliveries": 43,
"status": "pass"
}
]
}
@@ -0,0 +1,62 @@
{
"clients": 500,
"accounts": 100,
"rooms": 10,
"message_rounds": 3,
"concurrency": 20,
"binary": "/tmp/xmpp-durable-muc-load-p95vsvii/rust-xmpp",
"binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"before": {
"rss_kib": 10076,
"cpu_seconds": 0.0,
"fd_count": 12
},
"connect_seconds": 3.149,
"connect_latency": {
"samples": 500,
"median_ms": 121.817,
"p95_ms": 169.081,
"max_ms": 257.299
},
"phase": "completed",
"status": "pass",
"elapsed_seconds": 39.535,
"join_seconds": 25.54,
"joined": {
"rss_kib": 42224,
"cpu_seconds": 14.41,
"fd_count": 512
},
"join_presence_deliveries": 25000,
"slots_joined": {
"count": 500,
"bytes": 309790
},
"message_seconds": 5.504,
"room_messages_sent": 30,
"room_messages_delivered": 1500,
"before_kill": {
"rss_kib": 42224,
"cpu_seconds": 17.88,
"fd_count": 512
},
"slots_before_kill": {
"count": 500,
"bytes": 514030
},
"restart_seconds": 2.962,
"resumed_resources": 10,
"replayed_pending_room_messages": 10,
"membership_groupchat_deliveries_after_resume": 10,
"after_resume": {
"rss_kib": 20796,
"cpu_seconds": 2.81,
"fd_count": 22
},
"slots_after_resume": {
"count": 500,
"bytes": 671070
},
"total_seconds": 39.535,
"peak_rss_kib": 42240
}
File diff suppressed because it is too large. Load diff
+164
View File
@@ -0,0 +1,164 @@
{
"binary_source": "/tmp/rust-xmpp-0.8.2-final",
"binary_sha256": "130431025c4c7c2f72e28b77a31c83867f857ef8bb56d1f71b10e4b19d7caaf5",
"scope": "real loopback TCP/STARTTLS/SASL2 Bind2; isolated personal MAM fixture; no production latency claim",
"timing": "raw ordered samples; auth timer starts before authenticate and ends at parsed success; full timer includes TCP/STARTTLS/features; metadata IQ timer runs from send to parsed result",
"result": {
"status": "pass",
"seeded_personal_archive_records": 100000,
"archive_bytes": 21488890,
"archive_expires_after": "never",
"index_present_before_start": false,
"reconnect_samples": 5,
"expected_metadata": {
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
"observed_metadata": [
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
}
],
"mam_metadata_iq": {
"samples_ms": [
0.4802089999884629,
0.35487300010572653,
0.3393980000510055,
0.49224100007450033,
0.3266720000283385
],
"median_ms": 0.35487300010572653,
"p95_ms": 0.49224100007450033,
"max_ms": 0.49224100007450033
},
"observed_iq_metadata": [
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
}
],
"sasl2_bind2_success": {
"samples_ms": [
1.9306740000502032,
2.103263999970295,
2.0025989999794547,
1.9764060000397876,
1.8955069999719854
],
"median_ms": 1.9764060000397876,
"p95_ms": 2.103263999970295,
"max_ms": 2.103263999970295
},
"tcp_starttls_to_bind2_success": {
"samples_ms": [
6.099597000002177,
3.735450000021956,
3.564695000022766,
3.3520640001825086,
3.3587010000246664
],
"median_ms": 3.564695000022766,
"p95_ms": 6.099597000002177,
"max_ms": 6.099597000002177
}
}
}
@@ -0,0 +1,164 @@
{
"binary_source": "/tmp/xmpp-message-latency-original-binary",
"binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"scope": "real loopback TCP/STARTTLS/SASL2 Bind2; isolated personal MAM fixture; no production latency claim",
"timing": "raw ordered samples; auth timer starts before authenticate and ends at parsed success; full timer includes TCP/STARTTLS/features; metadata IQ timer runs from send to parsed result",
"result": {
"status": "pass",
"seeded_personal_archive_records": 100000,
"archive_bytes": 21488890,
"archive_expires_after": "never",
"index_present_before_start": false,
"reconnect_samples": 5,
"expected_metadata": {
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
"observed_metadata": [
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
}
],
"mam_metadata_iq": {
"samples_ms": [
2809.4374219999736,
2219.536220000009,
1944.7504689999278,
2437.94546800018,
3715.6457869998576
],
"median_ms": 2437.94546800018,
"p95_ms": 3715.6457869998576,
"max_ms": 3715.6457869998576
},
"observed_iq_metadata": [
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
},
{
"start": {
"id": "seed-0",
"timestamp": "2026-01-01T00:00:00Z"
},
"end": {
"id": "seed-99999",
"timestamp": "2026-01-02T03:46:39Z"
}
}
],
"sasl2_bind2_success": {
"samples_ms": [
2973.741726999833,
1934.8616100000982,
2034.18535600008,
3162.465005000058,
2742.352718999882
],
"median_ms": 2742.352718999882,
"p95_ms": 3162.465005000058,
"max_ms": 3162.465005000058
},
"tcp_starttls_to_bind2_success": {
"samples_ms": [
2977.800272999957,
1937.2807600000215,
2036.7481539999517,
3165.2697970000645,
2745.1149930000156
],
"median_ms": 2745.1149930000156,
"p95_ms": 3165.2697970000645,
"max_ms": 3165.2697970000645
}
}
}
@@ -0,0 +1,62 @@
{
"clients": 500,
"accounts": 100,
"rooms": 10,
"message_rounds": 3,
"concurrency": 20,
"binary": "/tmp/xmpp-durable-muc-load-qywt10tu/rust-xmpp",
"binary_sha256": "130431025c4c7c2f72e28b77a31c83867f857ef8bb56d1f71b10e4b19d7caaf5",
"before": {
"rss_kib": 9548,
"cpu_seconds": 0.0,
"fd_count": 12
},
"connect_seconds": 2.918,
"connect_latency": {
"samples": 500,
"median_ms": 114.756,
"p95_ms": 154.077,
"max_ms": 206.971
},
"phase": "completed",
"status": "pass",
"elapsed_seconds": 45.54,
"join_seconds": 30.37,
"joined": {
"rss_kib": 41856,
"cpu_seconds": 16.64,
"fd_count": 514
},
"join_presence_deliveries": 25000,
"slots_joined": {
"count": 500,
"bytes": 309790
},
"message_seconds": 6.696,
"room_messages_sent": 30,
"room_messages_delivered": 1500,
"before_kill": {
"rss_kib": 41884,
"cpu_seconds": 20.77,
"fd_count": 512
},
"slots_before_kill": {
"count": 500,
"bytes": 514030
},
"restart_seconds": 2.763,
"resumed_resources": 10,
"replayed_pending_room_messages": 10,
"membership_groupchat_deliveries_after_resume": 10,
"after_resume": {
"rss_kib": 20984,
"cpu_seconds": 2.66,
"fd_count": 22
},
"slots_after_resume": {
"count": 500,
"bytes": 671070
},
"total_seconds": 45.54,
"peak_rss_kib": 41920
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,498 @@
{
"binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"scope": "loopback STARTTLS; fixture only; forced CSI dwell explicitly separated",
"cases": [
{
"active": {
"delivery": {
"samples": 3,
"median_ms": 4.817936999870653,
"p95_ms": 16.517306000196186,
"max_ms": 16.517306000196186,
"samples_ms": [
4.748034999920492,
4.817936999870653,
16.517306000196186
]
},
"sender_sm_handled": {
"samples": 3,
"median_ms": 4.7456789998250315,
"p95_ms": 16.426100000217048,
"max_ms": 16.426100000217048,
"samples_ms": [
4.626912000048833,
4.7456789998250315,
16.426100000217048
]
},
"client_receipt_end_to_end": {
"samples": 3,
"median_ms": 10.344463999899745,
"p95_ms": 21.304692000057912,
"max_ms": 21.304692000057912,
"samples_ms": [
9.215212999833966,
10.344463999899745,
21.304692000057912
]
},
"receipt_return_leg": {
"samples": 3,
"median_ms": 4.755211999963649,
"p95_ms": 5.568677999917782,
"max_ms": 5.568677999917782,
"samples_ms": [
4.3716870000025665,
4.755211999963649,
5.568677999917782
]
}
},
"inactive": {
"delivery": {
"samples": 3,
"median_ms": 4.89018300004318,
"p95_ms": 5.018079000137732,
"max_ms": 5.018079000137732,
"samples_ms": [
4.7031279998464015,
4.89018300004318,
5.018079000137732
]
},
"sender_sm_handled": {
"samples": 3,
"median_ms": 4.817049000166662,
"p95_ms": 5.079797999997027,
"max_ms": 5.079797999997027,
"samples_ms": [
4.60740799985615,
4.817049000166662,
5.079797999997027
]
},
"client_receipt_end_to_end": {
"samples": 3,
"median_ms": 9.543050000047515,
"p95_ms": 10.455423000166775,
"max_ms": 10.455423000166775,
"samples_ms": [
9.271581000120932,
9.543050000047515,
10.455423000166775
]
},
"receipt_return_leg": {
"samples": 3,
"median_ms": 4.79821100020672,
"p95_ms": 5.540141000210497,
"max_ms": 5.540141000210497,
"samples_ms": [
4.134176999968986,
4.79821100020672,
5.540141000210497
]
}
},
"receipt_only-active": {
"delivery_ms": 5.081753000013123,
"sender_sm_handled_ms": 4.81151700000737,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"receipt_only-inactive": {
"delivery_ms": 2010.5149120001897,
"sender_sm_handled_ms": 4.923649000147634,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 1.6535839999960444
},
"omemo_legacy_only-active": {
"delivery_ms": 2.6542460000200663,
"sender_sm_handled_ms": 2.3668179999276617,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_legacy_only-inactive": {
"delivery_ms": 2012.9395249998652,
"sender_sm_handled_ms": 2.5684999998247804,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 3.8570599999729893
},
"omemo_2_only-active": {
"delivery_ms": 2.803322000090702,
"sender_sm_handled_ms": 2.5052290000076027,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_2_only-inactive": {
"delivery_ms": 2006.170849,
"sender_sm_handled_ms": 2.1322459999737475,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 1.5037350001421146
},
"omemo_with_eme-active": {
"delivery_ms": 5.247026000006372,
"sender_sm_handled_ms": 4.908949999844481,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_with_eme-inactive": {
"delivery_ms": 6.537689000197133,
"sender_sm_handled_ms": 6.264521000048262,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"sm_backlog": {
"seeded_messages": 500,
"durable_pending_before_sample": 500,
"delivery_ms": 4.346552000015436,
"sender_sm_handled_ms": 4.268297999942661
},
"status": "pass",
"final_personal_mam_records_per_user": [
100517,
100517
],
"roster_contacts_per_user": 0,
"seeded_personal_mam_records_per_user": 100000,
"archive_policy": "always"
},
{
"active": {
"delivery": {
"samples": 3,
"median_ms": 19.816834000039307,
"p95_ms": 34.282772000096884,
"max_ms": 34.282772000096884,
"samples_ms": [
19.449956000016755,
19.816834000039307,
34.282772000096884
]
},
"sender_sm_handled": {
"samples": 3,
"median_ms": 19.71937500002241,
"p95_ms": 34.19807699992816,
"max_ms": 34.19807699992816,
"samples_ms": [
19.322317000160183,
19.71937500002241,
34.19807699992816
]
},
"client_receipt_end_to_end": {
"samples": 3,
"median_ms": 39.9533730001167,
"p95_ms": 54.972926000118605,
"max_ms": 54.972926000118605,
"samples_ms": [
39.557586999990235,
39.9533730001167,
54.972926000118605
]
},
"receipt_return_leg": {
"samples": 3,
"median_ms": 20.108162000042284,
"p95_ms": 20.66232500010301,
"max_ms": 20.66232500010301,
"samples_ms": [
20.07690499999626,
20.108162000042284,
20.66232500010301
]
}
},
"inactive": {
"delivery": {
"samples": 3,
"median_ms": 21.33975200013083,
"p95_ms": 22.656845000028625,
"max_ms": 22.656845000028625,
"samples_ms": [
19.565955999951257,
21.33975200013083,
22.656845000028625
]
},
"sender_sm_handled": {
"samples": 3,
"median_ms": 21.24135799999749,
"p95_ms": 22.574971000040023,
"max_ms": 22.574971000040023,
"samples_ms": [
19.466118999844184,
21.24135799999749,
22.574971000040023
]
},
"client_receipt_end_to_end": {
"samples": 3,
"median_ms": 42.33967000004668,
"p95_ms": 42.759643999943364,
"max_ms": 42.759643999943364,
"samples_ms": [
39.931753000018944,
42.33967000004668,
42.759643999943364
]
},
"receipt_return_leg": {
"samples": 3,
"median_ms": 20.32766500019534,
"p95_ms": 21.3887639999939,
"max_ms": 21.3887639999939,
"samples_ms": [
19.65616699999373,
20.32766500019534,
21.3887639999939
]
}
},
"receipt_only-active": {
"delivery_ms": 20.706908999954976,
"sender_sm_handled_ms": 20.764115000019956,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"receipt_only-inactive": {
"delivery_ms": 2024.603683000123,
"sender_sm_handled_ms": 19.517362000215144,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 2.5455170000441285
},
"omemo_legacy_only-active": {
"delivery_ms": 2.6721889998952975,
"sender_sm_handled_ms": 2.4056919999111415,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_legacy_only-inactive": {
"delivery_ms": 2008.3468199998151,
"sender_sm_handled_ms": 2.188200999853507,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 2.0773089997874195
},
"omemo_2_only-active": {
"delivery_ms": 3.2299929998771404,
"sender_sm_handled_ms": 2.707185999952344,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_2_only-inactive": {
"delivery_ms": 2008.4954139999809,
"sender_sm_handled_ms": 2.423592000013741,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 2.214231000152722
},
"omemo_with_eme-active": {
"delivery_ms": 22.333799999842086,
"sender_sm_handled_ms": 22.02385900000081,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_with_eme-inactive": {
"delivery_ms": 36.01745500009201,
"sender_sm_handled_ms": 35.61825799988583,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"sm_backlog": {
"seeded_messages": 500,
"durable_pending_before_sample": 500,
"delivery_ms": 18.815608000068096,
"sender_sm_handled_ms": 18.779131000201232
},
"status": "pass",
"final_personal_mam_records_per_user": [
100517,
100517
],
"roster_contacts_per_user": 5000,
"seeded_personal_mam_records_per_user": 100000,
"archive_policy": "roster"
},
{
"active": {
"delivery": {
"samples": 3,
"median_ms": 36.994213000070886,
"p95_ms": 46.157045999962065,
"max_ms": 46.157045999962065,
"samples_ms": [
32.354088000147385,
36.994213000070886,
46.157045999962065
]
},
"sender_sm_handled": {
"samples": 3,
"median_ms": 37.03395700017609,
"p95_ms": 46.22371799996472,
"max_ms": 46.22371799996472,
"samples_ms": [
32.41653200007022,
37.03395700017609,
46.22371799996472
]
},
"client_receipt_end_to_end": {
"samples": 3,
"median_ms": 70.08860200016898,
"p95_ms": 79.21533199987607,
"max_ms": 79.21533199987607,
"samples_ms": [
64.34645700005603,
70.08860200016898,
79.21533199987607
]
},
"receipt_return_leg": {
"samples": 3,
"median_ms": 32.9383449998204,
"p95_ms": 33.00209500002893,
"max_ms": 33.00209500002893,
"samples_ms": [
31.880290000117384,
32.9383449998204,
33.00209500002893
]
}
},
"inactive": {
"delivery": {
"samples": 3,
"median_ms": 36.834342000020115,
"p95_ms": 39.296434999869234,
"max_ms": 39.296434999869234,
"samples_ms": [
32.84419600004185,
36.834342000020115,
39.296434999869234
]
},
"sender_sm_handled": {
"samples": 3,
"median_ms": 36.63234700002249,
"p95_ms": 39.167316999964896,
"max_ms": 39.167316999964896,
"samples_ms": [
32.901452000032805,
36.63234700002249,
39.167316999964896
]
},
"client_receipt_end_to_end": {
"samples": 3,
"median_ms": 74.8365649999414,
"p95_ms": 82.56400300001587,
"max_ms": 82.56400300001587,
"samples_ms": [
65.61269799999536,
74.8365649999414,
82.56400300001587
]
},
"receipt_return_leg": {
"samples": 3,
"median_ms": 35.5047470000045,
"p95_ms": 45.70364199980759,
"max_ms": 45.70364199980759,
"samples_ms": [
32.67074199993658,
35.5047470000045,
45.70364199980759
]
}
},
"receipt_only-active": {
"delivery_ms": 35.88422400002855,
"sender_sm_handled_ms": 35.596954999846275,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"receipt_only-inactive": {
"delivery_ms": 2042.8565239999443,
"sender_sm_handled_ms": 37.33574900002168,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 1.5680029998748068
},
"omemo_legacy_only-active": {
"delivery_ms": 2.439558000105535,
"sender_sm_handled_ms": 2.5105040001562884,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_legacy_only-inactive": {
"delivery_ms": 2008.4427409999535,
"sender_sm_handled_ms": 2.87832799995158,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 1.7736980000790936
},
"omemo_2_only-active": {
"delivery_ms": 2.8043899999374844,
"sender_sm_handled_ms": 2.46161499990194,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_2_only-inactive": {
"delivery_ms": 2006.2423169999875,
"sender_sm_handled_ms": 2.324273000112953,
"durably_csi_buffered": true,
"forced_dwell_seconds": 2.0,
"after_activation_ms": 1.4116319998720428
},
"omemo_with_eme-active": {
"delivery_ms": 37.31560400001399,
"sender_sm_handled_ms": 37.00228699995023,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"omemo_with_eme-inactive": {
"delivery_ms": 34.92131200005133,
"sender_sm_handled_ms": 34.618570000020554,
"durably_csi_buffered": false,
"forced_dwell_seconds": 0,
"after_activation_ms": null
},
"sm_backlog": {
"seeded_messages": 500,
"durable_pending_before_sample": 500,
"delivery_ms": 37.54468600004657,
"sender_sm_handled_ms": 37.61967200011895
},
"status": "pass",
"final_personal_mam_records_per_user": [
100517,
100517
],
"roster_contacts_per_user": 10000,
"seeded_personal_mam_records_per_user": 100000,
"archive_policy": "roster"
}
]
}
@@ -0,0 +1,25 @@
{
"status": "pass",
"recipient_state": "hibernating",
"durable_pending_at_gateway_stream": {
"push-first": true,
"push-second": true
},
"observation_seconds": 2,
"elapsed_seconds": 2.0038609230000475,
"gateway_post_tls_stream_observed": true,
"gateway_post_tls_stream_at_bound": true,
"blocked_stage": "post-tls-features",
"durable_pending": {
"push-first": true,
"push-second": true
},
"sender_sm_ack_h": [
4
],
"sender_inputs": 4,
"sender_handled_before": 2,
"binary_version": "rust-xmpp 0.8.2 \u2014 experimental XMPP runtime",
"binary_sha256": "130431025c4c7c2f72e28b77a31c83867f857ef8bb56d1f71b10e4b19d7caaf5",
"scope": "loopback TLS fixture; stalled external XMPP push service; no APNs/FCM"
}
@@ -0,0 +1,17 @@
{
"status": "reproduced-blocking",
"observation_seconds": 2,
"elapsed_seconds": 2.005253799000002,
"gateway_post_tls_stream_observed": true,
"gateway_post_tls_stream_at_bound": true,
"blocked_stage": "post-tls-features",
"durable_pending": {
"push-first": true,
"push-second": false
},
"sender_sm_ack_h": [],
"sender_inputs": 4,
"sender_handled_before": 2,
"binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"scope": "loopback TLS fixture; stalled external XMPP push service; no APNs/FCM"
}
@@ -0,0 +1,25 @@
{
"status": "pass",
"recipient_state": "offline",
"durable_pending_at_gateway_stream": {
"push-first": true,
"push-second": true
},
"observation_seconds": 2,
"elapsed_seconds": 2.00361997899995,
"gateway_post_tls_stream_observed": true,
"gateway_post_tls_stream_at_bound": true,
"blocked_stage": "post-tls-features",
"durable_pending": {
"push-first": true,
"push-second": true
},
"sender_sm_ack_h": [
4
],
"sender_inputs": 4,
"sender_handled_before": 2,
"binary_version": "rust-xmpp 0.8.2 \u2014 experimental XMPP runtime",
"binary_sha256": "130431025c4c7c2f72e28b77a31c83867f857ef8bb56d1f71b10e4b19d7caaf5",
"scope": "loopback TLS fixture; stalled external XMPP push service; no APNs/FCM"
}
@@ -0,0 +1,23 @@
{
"status": "reproduced-blocking",
"recipient_state": "offline",
"durable_pending_at_gateway_stream": {
"push-first": false,
"push-second": false
},
"observation_seconds": 2,
"elapsed_seconds": 2.007238984000196,
"gateway_post_tls_stream_observed": true,
"gateway_post_tls_stream_at_bound": true,
"blocked_stage": "post-tls-features",
"durable_pending": {
"push-first": false,
"push-second": false
},
"sender_sm_ack_h": [],
"sender_inputs": 4,
"sender_handled_before": 2,
"binary_version": "rust-xmpp 0.8.0 \u2014 experimental XMPP runtime",
"binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"scope": "loopback TLS fixture; stalled external XMPP push service; no APNs/FCM"
}
File diff suppressed because it is too large. Load diff
+88
View File
@@ -0,0 +1,88 @@
{
"version": "0.8.0",
"date_utc": "2026-10-20",
"ordinary_tests": {
"passed": 293,
"failed": 0,
"ignored": 11
},
"fmt": "passed",
"clippy": "passed",
"release": "passed",
"release_binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"native_module_tests": 8,
"native_federation_tests": 1,
"muc_crash_network": "passed: real TLS, SIGKILL, temporary/persistent rooms, multiple resources, saved presence/roles, ordered history, acknowledged leave/kick/demotion/password/config, fixed grace, unsupported module rejection; destroy/tombstone separate log",
"sm_restart_network": "passed: SIGKILL/SIGTERM, legacy/SASL2, counter/replay/ack pruning, owner/token/h isolation, resource conflict, account deletion/recreation revocation, MUC offline fanout durable before recipient authentication",
"muc_sm_load": {
"clients": 500,
"accounts": 100,
"rooms": 10,
"message_rounds": 3,
"concurrency": 20,
"binary": "/tmp/xmpp-durable-muc-load-g0crm4ik/rust-xmpp",
"binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"before": {
"rss_kib": 9696,
"cpu_seconds": 0.0,
"fd_count": 12
},
"connect_seconds": 5.193,
"connect_latency": {
"samples": 500,
"median_ms": 204.391,
"p95_ms": 270.035,
"max_ms": 332.503
},
"phase": "completed",
"status": "pass",
"elapsed_seconds": 78.857,
"join_seconds": 46.703,
"joined": {
"rss_kib": 42248,
"cpu_seconds": 17.77,
"fd_count": 513
},
"join_presence_deliveries": 25000,
"slots_joined": {
"count": 500,
"bytes": 309790
},
"message_seconds": 10.861,
"room_messages_sent": 30,
"room_messages_delivered": 1500,
"before_kill": {
"rss_kib": 42128,
"cpu_seconds": 23.12,
"fd_count": 514
},
"slots_before_kill": {
"count": 500,
"bytes": 514030
},
"restart_seconds": 10.559,
"resumed_resources": 10,
"replayed_pending_room_messages": 10,
"membership_groupchat_deliveries_after_resume": 10,
"after_resume": {
"rss_kib": 21168,
"cpu_seconds": 5.03,
"fd_count": 23
},
"slots_after_resume": {
"count": 500,
"bytes": 671070
},
"total_seconds": 78.857,
"peak_rss_kib": 42252
},
"upload": "S3 fixture/migration/network regression passed; large 10GiB transfer retained as historical0.7.9 validation, not repeated0.8.0",
"limitations": [
"New TLS/SASL connection required; TCP/TLS sockets cannot survive process exit",
"At-least-once SM replay, not cross-store/network exactly-once transaction",
"Known builtin MUC features ported; arbitrary community Lua modules not executed",
"Private durable SM format is Rust-specific, bounded queues and component checkpoint; see MUC-RECOVERY.md",
"Loopback smoke tests, not production capacity or real client qualification",
"Full Prosody parity remains subject to COMPATIBILITY.md"
]
}
+190
View File
@@ -0,0 +1,190 @@
{
"version": "0.8.1",
"date_utc": "2026-10-21",
"ordinary_tests": {
"passed": 297,
"failed": 0,
"ignored": 11
},
"fmt": "passed",
"clippy": "passed",
"release": "passed",
"release_binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"native_module_tests": 8,
"native_federation_tests": 1,
"full_verify": "passed in single final run with native and both500-client loads",
"message_latency": {
"scope": "loopback STARTTLS; isolated fixture; no production latency claim",
"before_binary_sha256": "74882319fcb467dd1e1813ab61e85441ffd3dae2f9f7961b28fd98ec5da7c89a",
"after_binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"muc_history_records": 100000,
"rounds_per_state": 3,
"active_before": {
"samples": 3,
"median_ms": 2517.9402029999665,
"p95_ms": 2520.940784000004,
"max_ms": 2520.940784000004,
"samples_ms": [
2502.2604349999256,
2517.9402029999665,
2520.940784000004
]
},
"active_after": {
"samples": 3,
"median_ms": 4.680227999983799,
"p95_ms": 14.532127000052242,
"max_ms": 14.532127000052242,
"samples_ms": [
4.40479399992455,
4.680227999983799,
14.532127000052242
]
},
"inactive_before": {
"samples": 3,
"median_ms": 3866.027479999957,
"p95_ms": 4150.866962999999,
"max_ms": 4150.866962999999,
"samples_ms": [
2901.4587140000003,
3866.027479999957,
4150.866962999999
]
},
"inactive_after": {
"samples": 3,
"median_ms": 4.284876000042459,
"p95_ms": 5.071866999969643,
"max_ms": 5.071866999969643,
"samples_ms": [
4.257245000076182,
4.284876000042459,
5.071866999969643
]
}
},
"general_load": {
"total_load_wall_seconds": 8.892,
"requested_resources": 500,
"authenticated_bound_resources": 500,
"connection_setup_concurrency": 50,
"setup_wall_seconds": 0.646,
"setup_latency": {
"samples": 500,
"median_ms": 60.166,
"p95_ms": 81.981,
"max_ms": 105.233
},
"ping_rounds": 10,
"ping_round_trip": {
"samples": 5000,
"median_ms": 10.879,
"p95_ms": 21.103,
"max_ms": 23.338
},
"accounts": 100,
"message_rounds": 10,
"messages_sent": 5000,
"messages_received": 5000,
"message_batch_seconds": 6.009,
"metrics_before": {
"rss_kib": 8412,
"cpu_seconds": 0.0,
"fd_count": 11
},
"metrics_connected": {
"rss_kib": 27472,
"cpu_seconds": 1.09,
"fd_count": 511
},
"metrics_after_workload": {
"rss_kib": 28176,
"cpu_seconds": 11.23,
"fd_count": 511
},
"metrics_two_seconds_after_disconnect": {
"rss_kib": 28240,
"cpu_seconds": 11.27,
"fd_count": 11
},
"sampled_peak_rss_kib": 28240,
"fd_delta_after_disconnect": 0,
"failures": [],
"scope": "One loopback host, 100 accounts with distinct resources, TLS+PLAIN, ping and directed messages; not a production benchmark or proof of no memory leaks.",
"mam": {
"archive_files": 100,
"records": 10000,
"expected_records": 10000
}
},
"muc_sm_load": {
"clients": 500,
"accounts": 100,
"rooms": 10,
"message_rounds": 3,
"concurrency": 20,
"binary": "/tmp/xmpp-durable-muc-load-p95vsvii/rust-xmpp",
"binary_sha256": "c57757476f2019c60ac877e4a66364b17283218e3cc244ae3f29cde1d3be2977",
"before": {
"rss_kib": 10076,
"cpu_seconds": 0.0,
"fd_count": 12
},
"connect_seconds": 3.149,
"connect_latency": {
"samples": 500,
"median_ms": 121.817,
"p95_ms": 169.081,
"max_ms": 257.299
},
"phase": "completed",
"status": "pass",
"elapsed_seconds": 39.535,
"join_seconds": 25.54,
"joined": {
"rss_kib": 42224,
"cpu_seconds": 14.41,
"fd_count": 512
},
"join_presence_deliveries": 25000,
"slots_joined": {
"count": 500,
"bytes": 309790
},
"message_seconds": 5.504,
"room_messages_sent": 30,
"room_messages_delivered": 1500,
"before_kill": {
"rss_kib": 42224,
"cpu_seconds": 17.88,
"fd_count": 512
},
"slots_before_kill": {
"count": 500,
"bytes": 514030
},
"restart_seconds": 2.962,
"resumed_resources": 10,
"replayed_pending_room_messages": 10,
"membership_groupchat_deliveries_after_resume": 10,
"after_resume": {
"rss_kib": 20796,
"cpu_seconds": 2.81,
"fd_count": 22
},
"slots_after_resume": {
"count": 500,
"bytes": 671070
},
"total_seconds": 39.535,
"peak_rss_kib": 42240
},
"large_upload": "10GiB not repeated in0.8.1; S3 fixture/migration/network regression passed; historical0.7.8/0.7.9 reports retained",
"limitations": [
"Loopback timing, not production SLA or real client qualification",
"Required disk synchronization remains, at-least-once SM replay",
"Periodic archive maintenance and large MAM queries still perform archive IO",
"Full Prosody compatibility and production deployment not asserted; see COMPATIBILITY.md"
]
}
File diff suppressed because it is too large. Load diff