69 lines
6.3 KiB
Markdown
69 lines
6.3 KiB
Markdown
# MUC: расширения и восстановление0.7.6
|
|
|
|
Сопоставление выполнено с предоставленной Prosody cafd74b9c5ea: plugins/muc
|
|
и mod_muc_mam.lua. Поддержка относится к встроенным расширениям этой ревизии,
|
|
а не к произвольным community Lua plugins.
|
|
|
|
Добавлены hats из affiliation data, язык комнаты, политики PM/модераторских PM,
|
|
фильтрация presence по ролям и формы конфигурации. Поддельные occupant-id/hats
|
|
и MUC user identity из клиентского сообщения удаляются. muc_vcard и
|
|
muc_occupant_id можно отключить. Настройки MAM включают muc_log_all_rooms,
|
|
muc_log_presences, muc_log_include_total; presence хранится отдельными событиями,
|
|
обычный MAM-запрос выбирает groupchat сообщения как в native.
|
|
|
|
История работает без MAM: ограниченный буфер, maxstanzas/maxchars/seconds/since,
|
|
delay и раздельный subject. Архив MAM продолжает поддерживать историю persistent
|
|
комнат. Удаление комнаты очищает её MAM-архив.
|
|
|
|
## Как восстанавливается членство
|
|
|
|
При SIGTERM/Ctrl-C сервер сначала сохраняет метаданные комнаты и native
|
|
`state/<roomnode>.dat`, затем завершает соединения. Сохраняются nick, полный JID,
|
|
роль, show/status/priority и последнее сообщение истории. Это относится также
|
|
к временным комнатам с участниками. Транспортное отключение во время shutdown
|
|
не считается добровольным выходом из комнаты и не удаляет checkpoint.
|
|
|
|
После запуска сохранённые участники ожидают восстановления до300 секунд.
|
|
Они не становятся активными адресатами маршрутизации автоматически. Когда
|
|
тот же полный JID проходит SASL, bind и отправляет общую available presence,
|
|
сервер повторно проверяет комнату и восстанавливает членство, nick, роль и
|
|
presence. Одного совпадения bare JID или resource недостаточно.
|
|
Клиент может по-прежнему явно войти обычной MUC presence.
|
|
|
|
Отпечаток конфигурации должен совпасть с сохранённым: изменение пароля или
|
|
прав комнаты отменяет автоматическое восстановление; требуется обычный вход
|
|
с актуальными параметрами. В presence state не записываются MUC-пароли и
|
|
произвольные расширения. Пароль комнаты остаётся в исходной native config,
|
|
как и до этого. Тот же checkpoint не продлевает grace при повторных перезапусках. Успешно использованная запись восстановления
|
|
погашается на диске до отправки результата клиенту, чтобы авария не вернула
|
|
старую роль после выхода или снятия модератора.
|
|
Неактивированные временные комнаты очищаются после истечения срока.
|
|
|
|
Native формат читается/пишется и проверяется настоящей Prosody в обе стороны.
|
|
Для автоматического восстановления используются checkpoint с отпечатком и
|
|
временем Rust; старый native state без этих полей сам по себе не является
|
|
разрешением на автоматический вход. Обычное повторное присоединение доступно.
|
|
|
|
Это восстановление XMPP-членства в комнате: старые TCP/TLS-сокеты после
|
|
остановки процесса не существуют. SM resume между процессами не реализован.
|
|
Аварийный SIGKILL/отказ питания не создаёт новый checkpoint: гарантируется
|
|
проверенный штатный shutdown, а не полный crash recovery.
|
|
|
|
История ограничена `max_history_messages`: по умолчанию100, допустимый внутренний
|
|
предел4096. Состояние комнаты ограничено4096 ресурсами. Необязательные presence
|
|
поля слишком большого размера и последнее сообщение больше16KiB не включаются
|
|
в checkpoint; это не мешает сохранить членство. Текущие сообщения доставляются
|
|
по обычным транспортным лимитам.
|
|
|
|
## Проверка и границы
|
|
|
|
Автоматические тесты используют отдельные временные данные. Сетевой сценарий
|
|
останавливает процесс с живыми клиентскими socket, запускает его повторно,
|
|
проверяет persistent и temporary комнаты, запрет чужих identity/resource,
|
|
восстановленные роли/presence и доставку сообщений. Native oracle проверяет
|
|
перенос state с несколькими ресурсами туда и обратно.
|
|
|
|
Полная production-миграция, непрерывные федеративные reconnect и все community
|
|
расширения не проверены. Конкретные результаты — VALIDATION.md; общие пределы
|
|
сервера — COMPATIBILITY.md. Реальные клиенты должны повторно аутентифицироваться.
|