[--execute]`: dry run по умолчанию, local ↔ S3 и S3 ↔ S3 без удаления source. - Последовательное копирование с проверкой размера и полным SHA-256 readback destination; конфликтующий объект не перезаписывается. Временный диск — максимум один переносимый файл дополнительно к постоянному destination. - Durable migration journal позволяет продолжить прерванную операцию с теми же конфигурациями. Незавершённый или повреждённый journal блокирует startup; backend identity меняется только после проверки всех файлов. - Native `uploads`/`upload_stats`, slots и JWT сохраняются; поддерживаются native локальные файлы без Rust completion sidecar. Миграция требует остановки RustXMPP и Prosody, использующих общий `data_path`. - Multipart intent сохраняется до создания удалённого upload. Recovery находит потерянный UploadId через paginated listing и очищает только точный key принадлежащего slot. При сохранных metadata cleanup не зависит от lifecycle; lifecycle остаётся дополнительной защитой, а не гарантией. - Перед completion сохраняется durable marker. Неопределённый результат completion при отсутствии подтверждённого объекта помещает только этот slot в quarantine: PUT 409, retention не удаляет его, maintenance повторяет сверку. Startup продолжается; сохраняется single-use семантика. - Добавлены network regressions миграции и расширены проверки multipart recovery, потерянных ответов, отмены запросов и конфликтов destination. Настройка, команды миграции, recovery и ограничения отката: [docs/HTTP-UPLOAD.md](docs/HTTP-UPLOAD.md). Команды, результаты и границы подтверждения, включая qualification реального object store и 10 GiB: [docs/VALIDATION-0.7.9.md](docs/VALIDATION-0.7.9.md). Итог: 265 тестов, нагрузка 500 TLS клиентов и native reference — успешно. Реальные 10 GiB через MinIO (описанный test adapter), 1280parts и полный SHA-256 пройдены; подробности — [VALIDATION-0.7.9](docs/VALIDATION-0.7.9.md).
47 lines
1.3 KiB
TOML
47 lines
1.3 KiB
TOML
[package]
|
|
name = "rust-xmpp"
|
|
version = "0.7.9"
|
|
edition = "2024"
|
|
description = "Experimental Rust XMPP server with Prosody-compatible storage"
|
|
license = "MIT"
|
|
|
|
[dependencies]
|
|
anyhow = "1"
|
|
mlua = { version = "0.12", features = ["lua54", "vendored", "serde"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
serde_yaml_ng = "0.10"
|
|
toml = "0.9"
|
|
glob = "0.3"
|
|
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "io-util", "sync", "time", "signal", "fs"] }
|
|
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
|
|
rustls-pemfile = "2"
|
|
roxmltree = "0.21"
|
|
base64 = "0.22"
|
|
sha1 = "0.10"
|
|
sha2 = "0.10"
|
|
hmac = "0.12"
|
|
pbkdf2 = "0.12"
|
|
hex = "0.4"
|
|
subtle = "2"
|
|
stringprep = "0.1"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
|
|
chrono = { version = "0.4", default-features = false, features = ["std", "clock"] }
|
|
|
|
axum = { version = "0.8", features = ["ws"] }
|
|
futures-util = "0.3"
|
|
tokio-util = { version = "0.7", features = ["io"] }
|
|
http-body-util = "0.1"
|
|
hyper = { version = "1", features = ["client", "http1"] }
|
|
hyper-util = { version = "0.1", features = ["server-auto", "tokio", "service"] }
|
|
|
|
socket2 = "0.6"
|
|
|
|
hickory-resolver = { version = "0.24", features = ["tokio-runtime", "system-config"] }
|
|
rustls-native-certs = "0.8"
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|