Что означает эта трассировка стека ejabberd / erlang? - PullRequest
1 голос
/ 14 марта 2020

Может ли кто-нибудь помочь мне понять, что искать в этой трассировке стека? Я никогда не трогал Эрланга, поэтому не знаю, с чего начать.

Мы используем ejabberd v19.09 и получаем этот журнал ошибок для многих пользователей:

2020-03-14 15:29:31.096 [error] <0.2029.48>@mod_http_api:handle:257 REST API Error: set_presence([{<<"user">>,<<"53265363">>},{<<"host">>,<<"chat.us.com">>},{<<"resource">>,<<"ssid-3465">>},{<<"type">>,<<"available">>},{<<"show">>,<<"chat">>},{<<"status">>,<<"{\"current_lobby_id\":\"none\",\"status\":\"{\\r\
\\t\\\"rich_presence\\\": \\\"{\\\\r\\\
\\\\t\\\\\\\"rich_presence\\\\\\\": \\\\\\\"?s=PlayerStatusInMap?p0=21?p1=2?p2=3\\\\\\\",\\\\r\\\
\\\\t\\\\\\\"session_id\\\\\\\": \\\\\\\"ssid-3465-38a44f60-9df7-4c79-8c8e-1cc99e5039dd\\\\\\\"\\\\r\\\
}\\\",\\r\
\\t\\\"current_lobby_id\\\": \\\"{\\\\r\\\
\\\\t\\\\\\\"lobby_id\\\\\\\": \\\\\\\"c791cfaa-9fd3-4d0d-9d5c-1aeb9efb12e2@hangouts.chat.us.com\\\\\\\",\\\\r\\\
\\\\t\\\\\\\"privacy\\\\\\\": \\\\\\\"friends_only\\\\\\\"\\\\r\\\
}\\\"\\r\
}\",\"region\":\"\"}">>},{<<"priority">>,<<"0">>}]) -> exit:{noproc,{p1_server,call,[none,{set_presence,{presence,<<>>,available,<<>>,{jid,<<"953265363">>,<<"chat.us.com">>,<<"oak/ssid-3465-1cc99e5039dd">>,<<"1953265363">>,<<"chat.us.com">>,<<"4c79-8c8e-1cc99e5039dd">>},{jid,<<"1953265363">>,<<"chat.us.com">>,<<>>,<<"1953265363">>,<<"chat.us.com">>,<<>>},chat,[{text,<<"en">>,<<"{\"current_lobby_id\":\"none\",\"status\":\"{\\r\
\\t\\\"rich_presence\\\": \\\"{\\\\r\\\
\\\\t\\\\\\\"rich_presence\\\\\\\": \\\\\\\"?s=PlayerStatusInMap?p0=21?p1=2?p2=3\\\\\\\",\\\\r\\\
\\\\t\\\\\\\"session_id\\\\\\\": \\\\\\\"ssid-348c8e-1cc99e5039dd\\\\\\\"\\\\r\\\
}\\\",\\r\
\\t\\\"current_lobby_id\\\": \\\"{\\\\r\\\
\\\\t\\\\\\\"lobby_id\\\\\\\": \\\\\\\"c791cfaa-9fd3-4d0d-9d5c-1aeb9efb12e2@hangouts.chat.us.com\\\\\\\",\\\\r\\\
\\\\t\\\\\\\"privacy\\\\\\\": \\\\\\\"friends_only\\\\\\\"\\\\r\\\
}\\\"\\r\
}\",\"region\":\"\"}">>}],0,[],#{}}},1000]}} [{p1_server,call,3,[{file,"src/p1_server.erl"},{line,210}]},{mod_http_api,handle2,4,[{file,"src/mod_http_api.erl"},{line,267}]},{mod_http_api,handle,4,[{file,"src/mod_http_api.erl"},{line,228}]},{mod_http_api,perform_call,4,[{file,"src/mod_http_api.erl"},{line,188}]},{mod_http_api,process,2,[{file,"src/mod_http_api.erl"},{line,141}]},{ejabberd_http,process,2,[{file,"src/ejabberd_http.erl"},{line,366}]},{ejabberd_http,process_request,1,[{file,"src/ejabberd_http.erl"},{line,488}]},{ejabberd_http,process_header,2,[{file,"src/ejabberd_http.erl"},{line,286}]}]

1 Ответ

0 голосов
/ 15 марта 2020

Начните с фактической ошибки, которая скрыта посередине:

exit:{noproc,{p1_server,call,[none,{set_presence,.....

Итак, есть ошибка noproc, которая произошла во время вызова p1_server:call, где первый аргумент - none. (Вызов будет выглядеть как p1_server:call(none, {set_presence,...}).) То есть мы просим процесс с именем none выполнить команду set_presence, которая завершается неудачно, поскольку не зарегистрирован процесс с именем none.

Теперь давайте посмотрим на трассировку стека. Я добавил разрывы строк:

[{p1_server,call,3,[{file,"src/p1_server.erl"},{line,210}]},
 {mod_http_api,handle2,4,[{file,"src/mod_http_api.erl"},{line,267}]},
 {mod_http_api,handle,4,[{file,"src/mod_http_api.erl"},{line,228}]},
 {mod_http_api,perform_call,4,[{file,"src/mod_http_api.erl"},{line,188}]},
 {mod_http_api,process,2,[{file,"src/mod_http_api.erl"},{line,141}]},
 {ejabberd_http,process,2,[{file,"src/ejabberd_http.erl"},{line,366}]},
 {ejabberd_http,process_request,1,[{file,"src/ejabberd_http.erl"},{line,488}]},
 {ejabberd_http,process_header,2,[{file,"src/ejabberd_http.erl"},{line,286}]}]

В первой строке обнаруживается, что такого процесса нет, на строке 210 в p1_server.erl. Но нас больше интересует , почему мы передаем none в качестве аргумента в первую очередь. Трассировка стека предполагает, что это происходит где-то в mod_http_api.erl, но в этот момент я заблудился - похоже, что он извлекает аргументы из команды, но я не понимаю, где none исходит от ...

...