- Уменьшено число последовательных синхронизаций до доставки: ordinary
MAM append использует один sync вместо четырёх, SM checkpoint — один вместо двух. Checksummed redo journals сохраняют commit-before-ACK и восстанавливают native archive/SM JSON exports после аварии. - Ограничены рост журналов, ротация и tombstone GC. Старый `.rappend` и legacy JSON импортируются. Retain/save/purge не возвращают удалённые записи. - Recovery синхронизирует валидный journal перед публикацией состояния; проверка checksum не заменяет durability barrier. EIO при adoption блокирует startup или offline handoff. Новые fault fixtures проверяют сохранность журнала и retry. - Replay SM проверяет checksum/JSON всех frames, но создаёт и валидирует полный Record только для последнего snapshot, сокращая работу с superseded queues. - `message-processing-slow` содержит времена MAM отправителя/получателя, доставки, carbons, offline/push и handled, а также число ресурсов/копий. Payload и секреты не добавляются в логи. - Добавлена offline команда `storage-checkpoint CONFIG`: durable экспорт и передача archive writer/подготовка отката на legacy Rust. Не запускайте другого writer и не удаляйте journals до успешного завершения команды. - Новые crash, partial-write, corruption, EIO, recovery, handoff и latency регрессии включены в GitHub Actions через verify-local.sh; отчёты сохраняются. Измерения, ограничения и эксплуатация: [docs/DURABLE-MESSAGE-IO.md](docs/DURABLE-MESSAGE-IO.md), [docs/VALIDATION-0.8.3.md](docs/VALIDATION-0.8.3.md).
This commit is contained in:
1 parent
e9329ccbb2
commit
bff609097b
53 files changed
+8924
-1792
No files matched your search
+68
-40
@@ -1,51 +1,79 @@
|
||||
# Проверка0.8.2
|
||||
# Проверка 0.8.3
|
||||
|
||||
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).
|
||||
2026-10-21, Linux x86_64, Rust 1.99.1. Итоговый единый прогон после заморозки
|
||||
исходников: [verify.txt](validation-logs-0.8.3/verify.txt).
|
||||
[Machine-readable results](validation-results-0.8.3.json).
|
||||
|
||||
|Проверка|Результат|
|
||||
|---|---|
|
||||
|Rust ordinary tests|305passed,0failed,11ignored|
|
||||
|Rust ordinary tests|334 passed, 0 failed, 11 ignored|
|
||||
|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 — успешно|
|
||||
|Новые Rust regressions|13 archive redo + 2 rewrite crash boundaries + 14 SM journal, успешно|
|
||||
|Native reference|8 module/storage + 1 TLS/SASL EXTERNAL federation, успешно|
|
||||
|Archive >128 MiB|Отдельно выполненный ignored streaming test, успешно|
|
||||
|Copy/restore и rewrite|Новый inode, потеря suffix, baseline0/nonzero, crash до/после rename — успешно|
|
||||
|Все network regressions verify-local.sh|Успешно, включая Android, WSS/BOSH, PEP, push, MUC crash/SM resume, upload/migration|
|
||||
|Slow durable IO|0/100 мс: 3 samples/scenario; 200 мс: 1 sample/scenario; exact MAM/carbons/queues и phase logs проверены|
|
||||
|SIGKILL сразу после sender SM ACK|100 мс/sync, 3 сообщения, оба MAM архива, 4 resume, 9 replay, до reauth; успешно|
|
||||
|Recovery sync EIO|WAL/redo: отказ handoff без удаления journal; WAL startup до listeners; retry и данные проверены|
|
||||
|Offline storage-checkpoint|4 SM exports, 2 archives, durable journal removal, повтор идемпотентен|
|
||||
|Общая нагрузка|500 TLS, 100 accounts, 5000 ping, 5000 messages, 10000 MAM, failures=[]|
|
||||
|MUC+SM нагрузка|500 resources, 10 rooms, 25000 presence, 1500 deliveries, SIGKILL и 10 resume; успешно|
|
||||
|
||||
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 указан отдельно.
|
||||
Медианы для 3 samples, при 200 мс — одна проба; числа в миллисекундах.
|
||||
|
||||
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.
|
||||
|Sync delay / сценарий|Body 0.8.2 → 0.8.3|Sender SM ACK 0.8.2 → 0.8.3|Проб|
|
||||
|---|---:|---:|---:|
|
||||
|0 мс / 1:1|25.11 → 7.87|33.41 → 15.08|3|
|
||||
|0 мс / PEP → 1:1|29.71 → 20.94|32.25 → 21.86|3|
|
||||
|100 мс / 1:1|1232.47 → 419.68|1641.60 → 644.08|3|
|
||||
|100 мс / PEP → 1:1|2683.29 → 1378.23|3195.21 → 1581.98|3|
|
||||
|200 мс / 1:1|2836.64 → 2042.56|3643.30 → 2441.99|1|
|
||||
|200 мс / PEP → 1:1|5782.02 → 2676.28|6595.92 → 3094.95|1|
|
||||
|
||||
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).
|
||||
0 мс — отдельная последовательная quiet pair, без full verify. Финальные
|
||||
100/200 мс выполнялись при фоновой работе verify; это не изолированный CPU benchmark.
|
||||
Первый append включает создание/migration MAM journal. В обычном warm сообщении
|
||||
6 sync вместо 16; первый — 12. Окна счётчиков могут включать heartbeat, а PEP
|
||||
сценарий включает предшествующую publication. Реальные fsync/fdatasync сохранены;
|
||||
interposer замедляет только isolated data_path, не меняет host mount/DNS.
|
||||
Raw samples, hashes, sync counts и phase fields — validation-logs-0.8.3/*.json.
|
||||
|
||||
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.
|
||||
В production log 0.8.2 серверный handler занимал 4792–5549 мс; старых полей
|
||||
недостаточно, чтобы доказать конкретный IO stage. Новый таймер разделяет MAM,
|
||||
доставку, carbons и handled, без payload. Эти loopback результаты не доказывают
|
||||
время отображения реальным Conversations/Monocles на wthome.ru.
|
||||
|
||||
Это 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.8.2 в текущей среде: total 151.334 с,
|
||||
join 104.226 с. Финальный 0.8.3: total 128.380 с,
|
||||
join 94.493 с, restart 7.557 с,
|
||||
peak RSS 40.87 MiB. По одной пробе; фоновые условия
|
||||
различаются, вывод о CPU efficiency не делается. Исторические 45.54 с из другой
|
||||
среды не являются baseline этого сравнения. Все счётчики доставки и replay
|
||||
проверены, а не только открытие порта.
|
||||
|
||||
## Durability и native handoff
|
||||
|
||||
SM WAL и archive redo авторитетны после аварии. Recovery durably adopts полный
|
||||
валидный journal перед публикацией; EIO regression выявляла отсутствие barrier
|
||||
в предварительном кандидате a5f5b3a…, теперь проходит на final binary. Отчёты
|
||||
preliminary-recovery-sync-* сохранены именно как предварительные, не результаты
|
||||
0.8.2 или final. Изначальный native MUC fixture делал in-place append без передачи
|
||||
владения: теперь он явно вызывает checkpoint_all перед оригинальным Prosody.
|
||||
Неjournaled suffix при активном redo намеренно не объявляется external commit.
|
||||
Copy/restore с новым inode сохраняет авторитет redo; внутренний rewrite
|
||||
фиксирует старый native и удаление redo перед atomic replacement. Проверены
|
||||
оба crash boundaries, потеря suffix после копирования и обе baseline длины.
|
||||
Перед native writer/откатом требуется остановка и `storage-checkpoint CONFIG`.
|
||||
[Формат, ограничения и эксплуатация](DURABLE-MESSAGE-IO.md).
|
||||
|
||||
Release SHA-256: `8ceb8de3a2d02bc4399b8ae817dff7e3c3fe9bff83dc0c6669b7f19210a3847a`.
|
||||
Один final verify с XMPP_LOAD_CHECK=1 и native env; отдельно archive ignored test
|
||||
и подробные latency/crash/EIO fixtures. Исторические результаты сохранены.
|
||||
Оставшийся AF_UNIX ignored test не запускался; 10 GiB upload и реальный MinIO/AWS,
|
||||
Docker build/run, GitHub/Gitea publish и настоящие APNs/FCM не повторялись.
|
||||
Общие границы полной совместимости: [COMPATIBILITY.md](COMPATIBILITY.md).
|
||||
Reference in new issue
Block a user