2010-05-21 2 views

ответ

3

Попробуйте erlang:disconnect_node/1:

([email protected])1> nodes(). 
[] 
([email protected])2> net_adm:ping('[email protected]').   
pong 
([email protected])3> nodes().    
[[email protected]] 
([email protected])4> erlang:disconnect_node('[email protected]'). 
true 
([email protected])5> nodes().       
[] 

Или, если вы хотите, чтобы узел удалить себя из других узлов nodes():

([email protected])1> nodes(). 
[[email protected]] 
([email protected])2> rpc:eval_everywhere(erlang, disconnect_node, [node()]). 
abcast 
([email protected])3> nodes(). 
[] 

Если узел был запущен с ключом -hidden:

([email protected])1> nodes(hidden). 
[[email protected]] 
([email protected])2> rpc:eval_everywhere(nodes(hidden), erlang, disconnect_node, [node()]). 
abcast 
([email protected])3> nodes(hidden). 
[] 
+0

К сожалению, это не идет так далеко, как я надеялся. Когда вы запускаете узел как скрытый, а затем пинговаете его, он не будет отображаться в узлах(). Используя вышеописанный метод, если вы снова выполните ping после отключения, узлы снова появятся в узлах(). – mwt

+0

@mwt: ['nodes/1'] (http://www.erlang.org/doc/man/erlang.html#nodes-1) имеет другие аргументы, которые вы можете выбрать:' visible', 'hidden', 'connected',' this', 'known'. И целью ['ping/1'] (http://www.erlang.org/doc/man/net_adm.html#ping-1) является попытка« установить соединение с «Узлом». Возвращает «pang», если он терпит неудачу, или «понг», если он успешный ». Я думаю, вы можете реализовать желаемое поведение, используя эти примитивы. –

+0

Возможно, но пока я не совсем понимаю. Прямо сейчас у меня кластер. Всякий раз, когда соединяется новый узел, он пытается подключиться к каждому узлу кластера, отправив его. Если один из этих узлов был -hidden, пинг не будет подключать новый узел к скрытому узлу, чего я хочу. Однако просто отсоединение узла, который я хочу сделать скрытым, позволяет подключать его посредством прямого пинга, после чего он снова появляется в узлах(). Теперь, если есть способ изменить состояние узла, в котором вызывающие узлы() с любым аргументом все же исключают его, даже после прямого пинга, я хотел бы знать, что это такое. – mwt

Смежные вопросы