… | |
… | |
78 | $SEEDS{$peer} = $_[0]{remote_node}; |
78 | $SEEDS{$peer} = $_[0]{remote_node}; |
79 | }; |
79 | }; |
80 | |
80 | |
81 | push @AnyEvent::MP::Transport::HOOK_DESTROY, sub { |
81 | push @AnyEvent::MP::Transport::HOOK_DESTROY, sub { |
82 | delete $SEED_CONNECT{$_[0]{local_greeting}{peeraddr}}; |
82 | delete $SEED_CONNECT{$_[0]{local_greeting}{peeraddr}}; |
|
|
83 | |
|
|
84 | # check if we contacted ourselves, so nuke this seed |
|
|
85 | if ($_[0]{remote_node} eq $AnyEvent::MP::Kernel::NODE) { |
|
|
86 | $AnyEvent::MP::Kernel::WARN->(0,"avoiding seed $_[0]\n");#d# |
|
|
87 | delete $SEEDS{$_[0]{local_greeting}{peeraddr}}; |
|
|
88 | } |
83 | }; |
89 | }; |
84 | |
90 | |
85 | sub seed_connect { |
91 | sub seed_connect { |
86 | my ($seed) = @_; |
92 | my ($seed) = @_; |
87 | |
93 | |
… | |
… | |
111 | |
117 | |
112 | @SEEDS = keys %SEEDS unless @SEEDS; |
118 | @SEEDS = keys %SEEDS unless @SEEDS; |
113 | return unless @SEEDS; |
119 | return unless @SEEDS; |
114 | |
120 | |
115 | seed_connect splice @SEEDS, rand @SEEDS, 1; |
121 | seed_connect splice @SEEDS, rand @SEEDS, 1; |
116 | } |
|
|
117 | |
|
|
118 | sub avoid_seed($) { |
|
|
119 | delete $SEEDS{$_[0]}; |
|
|
120 | } |
122 | } |
121 | |
123 | |
122 | sub set_seeds(@) { |
124 | sub set_seeds(@) { |
123 | @SEEDS{@_} = (); |
125 | @SEEDS{@_} = (); |
124 | |
126 | |
… | |
… | |
355 | |
357 | |
356 | # forget about the node |
358 | # forget about the node |
357 | delete $addr{$node}; |
359 | delete $addr{$node}; |
358 | # ask other nodes if they know the node |
360 | # ask other nodes if they know the node |
359 | snd $_, find => $node |
361 | snd $_, find => $node |
360 | for values %port; |
362 | for grep $_, map $port{$_}, _route_nodes; |
361 | } |
363 | } |
362 | #warn "node<$node,$is_up>\n";#d# |
364 | #warn "node<$node,$is_up>\n";#d# |
363 | } |
365 | } |
364 | |
366 | |
365 | mon_node $_, 1 |
367 | mon_node $_, 1 |