docs: MAM baseline 0.8.4 — best-effort archival and offline repair
Document the 'archive redo baseline changed in place' failure, the runtime session isolation, the offline storage-checkpoint repair, and the Prosody native-format comparison (list_append in-place vs list_store atomic rename).
This commit is contained in:
1 parent
100005379b
commit
75bb730d3c
3 files changed
+99
-27
No files matched your search
@@ -235,7 +235,7 @@ bind2_archive_latency_network.py, archive_edges.rs, session_routing_isolation.rs
|
||||
После изменений обновляйте точные границы совместимости и результаты проверки.
|
||||
Не перезаписывайте исторические отчёты как будто они относятся к новой сборке.
|
||||
В передаваемый ZIP включайте AGENTS.md, workflow, vendor reference, исходники,
|
||||
документацию и scripts; исключайте target, demo data, bin, .git, __pycache__, pyc
|
||||
документацию и scripts; исключайте target, demo data, bin, .git, **pycache**, pyc
|
||||
и секреты. Сохраняйте executable bits shell scripts и проверяйте содержимое ZIP.
|
||||
|
||||
## Durable message IO 0.8.3
|
||||
@@ -298,3 +298,34 @@ Final binary SHA-256: 8ceb8de3a2d02bc4399b8ae817dff7e3c3fe9bff83dc0c6669b7f19210
|
||||
Подробные samples/границы — docs/VALIDATION-0.8.3.md. Checksum и JSON syntax всех frames
|
||||
проверяются при SM replay, но Record создаётся только для последнего
|
||||
snapshot. Recovery WAL sync до публикации обязателен; EIO fixture защищает это.
|
||||
|
||||
## Monal MAM baseline 0.8.4
|
||||
|
||||
Баг: «archive redo baseline changed in place» на живом сервере — внешняя
|
||||
перезапись native `.list` поверх зафиксированного redo-baseline (бакап/копия
|
||||
data_path/Prosody/старая версия) делала каждый `archive_for_user` Err, `?` ронял
|
||||
session, клиент (Monal-iOS) реконнектился и не доставлял сообщение. Причина не в
|
||||
обычном append — baseline ломает только перезапись первых `base` байт в обход
|
||||
`.rredo`; наш Rust-append пишет только в конец.
|
||||
|
||||
Фикс (commit 1000053): 1) MAM-архивация на личной доставке (отправитель,
|
||||
получатель, входящая федерация) стала best-effort `archive_message_best_effort` —
|
||||
storage-ошибка не роняет session и не роняет доставку, в лог `mam-archive-skipped`
|
||||
(санитизированный `sanitized_label`, без payload); 2) offline `storage-checkpoint`
|
||||
теперь ремонтирует непроверенный baseline: `prepare_rewrite` через
|
||||
`is_untrusted_redo` считает текущий синхронизированный native авторитетным и
|
||||
удаляет неприменимый журнал (`retire_redo`). Живой append остаётся fail-closed.
|
||||
Новые tests: `archive.rs` `runtime_append_fails_closed_...`/
|
||||
`offline_checkpoint_retires_...`, сетевой `tests/mam_broken_baseline_network.py`
|
||||
(перезапись baseline не роняет доставку; checkpoint возвращает MAM).
|
||||
|
||||
Сравнение с Prosody: `util/datamanager.lua` `list_append` пишет в конец, а
|
||||
`list_store` (перезапись) делает atomic rename — меняет первые bytes baseline;
|
||||
`plugins/mod_storage_internal.lua` `archive:append` для MUC/`key` и trim/delete
|
||||
делает `list_store` (полная перезапись). Prosody не понимает `.rredo` sidecar. Наш
|
||||
native `.list` сохраняет Prosody-совместимый `item(...)` формат.
|
||||
|
||||
Операционный ремонт пользователя: остановить сервер, `./target/release/rust-xmpp
|
||||
storage-checkpoint CONFIG`, запустить снова. `--experimental` не снимать. Полная
|
||||
замена Prosody требует реального CI, внешней федерации, настоящих клиентов/push,
|
||||
deployment/UID/TLS, rollback и длительной нагрузки — см. COMPATIBILITY.md.
|
||||
Reference in new issue
Block a user