commit (включая fsync/append). fsync одного канала задерживал SM-коммиты всех остальных сессий; при медленном диске и нескольких пользователях это выглядело как «сервер перестал отвечать на запросы» и секундная доставка сообщений. - Глобальная блокировка разделена: короткий lock `slots` теперь только валидирует token/limits и резервирует слот; сам append+fsync идёт под per-session `wal` lock. Один медленный канал больше не блокирует остальных. - Ротация/compaction/GC сериализуются отдельным `maintenance` lock вне любого per-session lock — очереди append и compaction для одного WAL не гонки, дедлоков нет, инварианты durable и crash-тесты сохранены. - Все существующие crash/latency/recovery regressions зелёные без изменений. Для genuinely медленного диска (VPS с медленным fsync) добавлена опция как в Prosody, где исходящие SM-stanza живого клиента идут в in-memory smqueue без fsync, а durable пишутся счётчик/h и переход в hibernation. - `smacks_online_durable = false` (strict — default): live-сессии не fsync на каждый outbound/ack, а помечают `dirty`; фоновый проход `smacks_flush_interval` (default1с) и offline-переход фиксируют durable. - Offline/hibernating цели в любом режиме фиксируются durable ДО доставки — сохраняются критичные инварианты («Alice отправила, Bob ещё не авторизован») и crash-регрессии; отзыв токенов/expiry остаётся durable. - Pre-ACK durable гарантию даёт строгий режим; deferred — компромисс Prosody «низкая задержка» в обмен на ограниченное окно потери для online-пиров. - `cargo test --locked --release`: 54 binary, 336 passed, 11 ignored (0 fail). - Strict crash (`slow_storage_crash_network`), latency (`slow_storage_latency`), `sm_restart`, `journal_recovery_sync`, личная доставка — все зелёные. - Новые регрессии: `tests/deferred_sm_online_network.py` (wire, deferred режим: offline durable до ACK, online доставка + flush persist), два Rust unit-теста в `tests/sm_journal.rs` (deferred online commit/flush, offline durable). - `push_latency_network.py` в этой среде падает на TLS CA `keyUsage` из-за более строгого TLS в Python 3.14 (до SM-кода, не связано с этим изменением). Документация: [docs/DURABLE-MESSAGE-IO.md](docs/DURABLE-MESSAGE-IO.md), [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md).
60 lines
3.9 KiB
Bash
Executable File
60 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# All runtime checks below create isolated data and use loopback listeners.
|
|
set -euo pipefail
|
|
project_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
|
cd -- "$project_dir"
|
|
cargo fmt --check
|
|
cargo test --locked
|
|
cargo clippy --locked --all-targets -- -D warnings
|
|
cargo build --release --locked
|
|
python3 scripts/integration_xmpp.py
|
|
python3 tests/sasl_network.py --spawn --hash sha1
|
|
python3 tests/sasl_network.py --spawn --hash sha256
|
|
python3 tests/android_sasl_network.py target/release/rust-xmpp
|
|
python3 tests/logging_network.py target/release/rust-xmpp
|
|
python3 tests/sasl_retry_network.py target/release/rust-xmpp
|
|
python3 tests/sasl_web_network.py --binary target/release/rust-xmpp
|
|
python3 tests/wss_interop.py --binary target/release/rust-xmpp
|
|
python3 tests/http_proxy_paths_network.py --binary target/release/rust-xmpp
|
|
python3 tests/http_altconnect_network.py --binary target/release/rust-xmpp
|
|
python3 tests/sasl2_bind.py target/release/rust-xmpp
|
|
python3 tests/bind2_archive_latency_network.py --binary target/release/rust-xmpp --records 10000 --samples 2 --output /tmp/bind2-archive-latency.json
|
|
python3 tests/sasl2_cached_inline.py target/release/rust-xmpp
|
|
python3 tests/gajim_discovery_network.py target/release/rust-xmpp
|
|
python3 tests/sasl2_resume.py target/release/rust-xmpp
|
|
python3 tests/push_discovery.py target/release/rust-xmpp
|
|
python3 tests/pep_client_network.py target/release/rust-xmpp
|
|
python3 tests/pep_order_network.py target/release/rust-xmpp
|
|
python3 tests/pep_notifications_network.py target/release/rust-xmpp
|
|
python3 tests/preauth_network.py target/release/rust-xmpp
|
|
python3 tests/muc_restart_network.py target/release/rust-xmpp
|
|
python3 tests/muc_crash_network.py target/release/rust-xmpp
|
|
python3 tests/sm_restart_network.py target/release/rust-xmpp
|
|
python3 tests/slow_storage_latency_network.py --binary target/release/rust-xmpp --delay-ms 0 25 --rounds 1 --output /tmp/slow-storage-latency.json
|
|
python3 tests/slow_storage_crash_network.py --binary target/release/rust-xmpp --delay-ms 25 --messages 3 --output /tmp/slow-storage-crash.json
|
|
python3 tests/deferred_sm_online_network.py --binary target/release/rust-xmpp
|
|
python3 tests/journal_recovery_sync_network.py --binary target/release/rust-xmpp --output /tmp/journal-recovery-sync.json
|
|
python3 tests/push_latency_network.py --binary target/release/rust-xmpp --recipient hibernating --output /tmp/push-latency.json
|
|
python3 tests/push_latency_network.py --binary target/release/rust-xmpp --recipient offline --output /tmp/push-offline-latency.json
|
|
python3 tests/personal_message_latency_network.py --binary target/release/rust-xmpp --rounds 1 --history-records 1000 --roster-sizes 0 --backlog 30 --csi-dwell 0.1 --output /tmp/personal-message-latency.json
|
|
python3 tests/message_latency_network.py --binary target/release/rust-xmpp --rounds 3 --history-records 0 10000 --output /tmp/xmpp-message-latency.json
|
|
python3 tests/resource_rebind.py target/release/rust-xmpp
|
|
python3 scripts/integration_http.py
|
|
python3 scripts/integration_http.py --custom-upload-path
|
|
python3 tests/upload_multi_network.py --binary target/release/rust-xmpp
|
|
python3 tests/upload_s3_network.py target/release/rust-xmpp
|
|
python3 tests/upload_migration_network.py target/release/rust-xmpp
|
|
# Opt-in real object-store run: default payload is 10 GiB, not a fixture.
|
|
if [[ -n ${MINIO_BINARY:-} ]]; then
|
|
python3 tests/upload_minio_network.py --binary target/release/rust-xmpp --minio "$MINIO_BINARY"
|
|
fi
|
|
if [[ ${XMPP_LOAD_CHECK:-0} == 1 ]]; then
|
|
python3 scripts/load_smoke.py --clients 500 --accounts 100 --rounds 10 --message-rounds 10 --archive
|
|
python3 tests/muc_sm_load_network.py --binary target/release/rust-xmpp --clients 500
|
|
fi
|
|
if [[ -n ${PROSODY_REFERENCE_SOURCE:-} ]]; then
|
|
RUSTUP_TOOLCHAIN=${RUSTUP_TOOLCHAIN:-1.99.1} scripts/prosody_compat/verify.sh \
|
|
"$PROSODY_REFERENCE_SOURCE" "${PROSODY_REFERENCE_LUA:-lua5.4}"
|
|
PROSODY_SOURCE="$PROSODY_REFERENCE_SOURCE" PROSODY_LUA="${PROSODY_REFERENCE_LUA:-lua5.4}" scripts/native-federation.sh
|
|
fi
|