Pull to refresh

Comments 12

Очень здорово, пишите ещё. Тут про Erlang материала почти нет.
Обязательно, как только придумается, о чем писать.

Подстава Эрланга в том, что на синтетических примерах сложно показать его прелесть, а выдумывать в учебных целях что-то полноценное не каждый возьмется.
я не ерлангер.
а почему сразу нельзя было сделать рпц вызов?
В самом начале мы не можем этого сделать по той же самой причине, по которой в первом абзаце валятся управляющие скрипты — без регистрации в epmd у rpc:call нет никакой возможности связаться с узлом.

Из анонимного узла мы не можем этого сделать, потому что анонимные узлы в принципе ни с кем не могут общаться.

Вместо пинга мы не можем этого сделать, потому что имя все еще занято анонимным узлом — а если мы его раньше времени убьем, не установив соединения, то потеряем регистрацию и, опять же, rpc:call никуда не пробьется.
Можно, конечно, начать искать виновных, но сначала все-таки неплохо бы поднять систему на место.
Угу. Подняли. А теперь надо бы всё-таки выяснить, почему оно сломалось. IMHO вопрос важный, т.к. если не ясна причина, то это может повториться, а регулярно заниматься таким ремонтом… да и просто любопытно.
Не, ну кто спорит-то.

У меня сейчас только одна хоть сколько-нибудь жизнеспособная гипотеза — что кто-то по ошибке или незнанию прибил процесс. Случаи самопроизвольной смерти epmd, когда никто ничего не трогает, насколько я могу судить, еще не были зафиксированы.

(Мы сами к той системе, кстати, имеем только достаточно ограниченный удаленный доступ и знаем только то, что нам говорят и что видно по логам. Тут с расследованием не особо развернешься.)
Т.е. данные случай можно считать единичным?

Только что восстановил ноду в epmd по твоей инструкции. Спасибо!


Вот только я получил pang в ответ на net_adm:ping() :) И предложенное решение мне, прямо скажем, не подошло :)


К счастью, в crash.log целевой ноды была подсказка:


2019-05-14 15:33:11 =ERROR REPORT====
** Connection attempt from disallowed node repair@host **

Оказывается, repair-ноду обязательно запускать с тем же значением -setcookie, что и целевая нода. (Source.)


Надеюсь, эта информация поможет.

В виде краткой шпаргалки:


$ ps aux | grep APPNAME
# скопировать PID, USER, COOKIE, NODENAME/SNAME
$ sudo -u USER lsof -p PID | grep LISTEN
# скопировать PORT
$ erl
> erl_epmd:start().
> erl_epmd:register_node(NODENAME, PORT).

        $ epmd -names
        $ erl -sname repair -setcookie COOKIE
        > net_adm:ping(SNAME).

> halt().
$ epmd -names

        > rpc:call(SNAME, erl_epmd, register_node, [NODENAME, PORT]).
        > halt().

$ epmd -names
$ erl -sname $USER -setcookie COOKIE -remsh SNAME
Only those users with full accounts are able to leave comments. Log in, please.