- Offline CLI `upload-migrate OLD_CONFIG NEW_CONFIG --component HOST
[--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).
This commit is contained in:
1 parent
c260d7bab8
commit
b30fc524d8
41 files changed
+5936
-152
No files matched your search
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"version": "0.7.7",
|
||||
"date_utc": "2026-10-20",
|
||||
"ordinary_tests": {
|
||||
"passed": 262,
|
||||
"failed": 0,
|
||||
"ignored": 11
|
||||
},
|
||||
"fmt": "passed",
|
||||
"clippy": "passed",
|
||||
"release": "passed",
|
||||
"native_module_tests": 8,
|
||||
"native_federation_tests": 1,
|
||||
"http_altconnect": {
|
||||
"native_reference": "supplied plugins/mod_http_altconnect.lua cafd74b9c5ea",
|
||||
"unit_tests": 3,
|
||||
"network_configurations": 10,
|
||||
"checks": [
|
||||
"HTTP and verified HTTPS XRD/JRD parity",
|
||||
"MIME/CORS/GET/HEAD/OPTIONS and method405",
|
||||
"query ignored, no JSONP",
|
||||
"advertise_bosh/websocket combinations and loaded transport gates",
|
||||
"discovery disabled while WSS still works",
|
||||
"custom altconnect/BOSH/WS mounts and public URL prefix",
|
||||
"local/global inheritance and HTTPS preference",
|
||||
"HTTP native compatibility fallback",
|
||||
"HTTP Host denial and overflowing port rejection",
|
||||
"config type/path collision rejection"
|
||||
],
|
||||
"public_urls": "configuration only; no request Host/Forwarded interpolation",
|
||||
"standard_caveat": "XEP0156 requires HTTPS metadata and HTTPS/WSS href; supplied-native HTTP/WS fallback retained and documented"
|
||||
},
|
||||
"load": {
|
||||
"total_load_wall_seconds": 7.447,
|
||||
"requested_resources": 500,
|
||||
"authenticated_bound_resources": 500,
|
||||
"connection_setup_concurrency": 50,
|
||||
"setup_wall_seconds": 0.653,
|
||||
"setup_latency": {
|
||||
"samples": 500,
|
||||
"median_ms": 57.419,
|
||||
"p95_ms": 87.729,
|
||||
"max_ms": 107.7
|
||||
},
|
||||
"ping_rounds": 10,
|
||||
"ping_round_trip": {
|
||||
"samples": 5000,
|
||||
"median_ms": 14.618,
|
||||
"p95_ms": 19.347,
|
||||
"max_ms": 30.719
|
||||
},
|
||||
"accounts": 100,
|
||||
"message_rounds": 10,
|
||||
"messages_sent": 5000,
|
||||
"messages_received": 5000,
|
||||
"message_batch_seconds": 4.483,
|
||||
"metrics_before": {
|
||||
"rss_kib": 7792,
|
||||
"cpu_seconds": 0.0,
|
||||
"fd_count": 11
|
||||
},
|
||||
"metrics_connected": {
|
||||
"rss_kib": 26488,
|
||||
"cpu_seconds": 1.17,
|
||||
"fd_count": 511
|
||||
},
|
||||
"metrics_after_workload": {
|
||||
"rss_kib": 27100,
|
||||
"cpu_seconds": 8.93,
|
||||
"fd_count": 511
|
||||
},
|
||||
"metrics_two_seconds_after_disconnect": {
|
||||
"rss_kib": 27228,
|
||||
"cpu_seconds": 8.95,
|
||||
"fd_count": 11
|
||||
},
|
||||
"sampled_peak_rss_kib": 27228,
|
||||
"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
|
||||
}
|
||||
},
|
||||
"release_binary_sha256": "4678c35c9ad53f2632f0f0245d842589a15dd4e02b9cb172f15dd7b035422294",
|
||||
"limitations": [
|
||||
"Real production proxy/discovery/client UI not run; operator must enable module and publish well-known on HTTPS domain",
|
||||
"Exactly one runtime VirtualHost; no Host Meta2/XEP0487",
|
||||
"Previous parity/PEP/DNSSEC limitations unchanged; COMPATIBILITY.md"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user