ejabberd: mom_mam выдает ошибку

Я только что установил ejabberd из исходников (18.04) с поддержкой MySQL и соответственно изменил файл конфигурации. В принципе все работает: запускается ejabberd, я могу регистрировать пользователей, пользователи могут подключаться и отправлять сообщения. Я также вижу всех пользователей в базе данных, поэтому я предполагаю, что настройка пока верна.

Теперь я хочу использовать мод mod_mam для архивации всех сообщений. Для этого я добавил в файл ejabberd.yaml следующие строки:

modules:
  ...
  mod_mam:
    db_type: sql
    default: always
  ...

Однако, когда я отправил сообщение в автономном режиме, я получаю следующую ошибку — на самом деле две похожие ошибки для двух функций, использующих хук автономного сообщения:

[error] <0.541.0>@ejabberd_hooks:safe_apply:383 Hook offline_message_hook crashed when running mod_mam:offline_message/1: 
** Reason = {error,function_clause,[{mod_mam,offline_message,[{file,"src/mod_mam.erl"},{line,366}],[ok]},{ejabberd_hooks,safe_apply,[{file,"src/ejabberd_hooks.erl"},{line,380}],4},{ejabberd_hooks,run_fold1,[{file,"src/ejabberd_hooks.erl"},{line,364}],4},{ejabberd_sm,route,[{file,"src/ejabberd_sm.erl"},{line,143}],1},{ejabberd_local,route,[{file,"src/ejabberd_local.erl"},{line,73}],1},{ejabberd_router,do_route,[{file,"src/ejabberd_router.erl"},{line,368}],1},{ejabberd_router,route,[{file,"src/ejabberd_router.erl"},{line,93}],1},{ejabberd_c2s,check_privacy_then_route,[{file,"src/ejabberd_c2s.erl"},{line,823}],2}]}

С более старой установкой (17.01) все работало нормально. Но я не знаю, нужны ли дополнительные таблицы MySQL. Когда я просматриваю свою текущую базу данных, я на самом деле все сообщения (включая автономные сообщения) сохраняются в таблице archive.


person Christian    schedule 21.05.2018    source источник
comment
Используете ли вы только модули, включенные в ejabberd, или вы устанавливали какие-либо дополнительные или другие пользовательские модули?   -  person Badlop    schedule 21.05.2018
comment
Ваш вопрос направил меня в правильном направлении. У меня есть собственный модуль, который использует этот хук. В случае автономного сообщения вызывается функция sent_notification({Action,Packet} = Acc). Однако я вернулся с ok.. Если я вернусь с Acc., все, кажется, работает. Итак, я предполагаю, что мне нужно передать ввод для следующего модуля (просто предположение, я не очень хорошо знаком с ejabberd/erlang). Я уверен, что мой модуль работал с ejabberd 17.01, когда подпись должна была быть sent_notification(From, To, Packet), а возврат с ok. работал. Если вы предоставите это как ответ, я могу принять его.   -  person Christian    schedule 22.05.2018


Ответы (1)


Используете ли вы только модули, включенные в ejabberd, или вы устанавливали какие-либо дополнительные или другие пользовательские модули?

Обратите внимание, что offline_message_hook изменился в 17.03 с «run» (без аккумулятора) на «run_fold» (с аккумулятором), что означает, что результат вызова функции передается следующему, пока все не закончатся или один не остановит хук.

См. коммит: https://github.com/processone/ejabberd/commit/e564f9ae31d2c5345be4eed66e710037ba> и хук документы: https://docs.ejabberd.im/developer/guide/#hooks< /а>

person Badlop    schedule 22.05.2018