… | |
… | |
179 | snd $SRCNODE, g_reply => $id, [values %{ $GLOBAL_DB{$family} } ]; |
179 | snd $SRCNODE, g_reply => $id, [values %{ $GLOBAL_DB{$family} } ]; |
180 | }; |
180 | }; |
181 | |
181 | |
182 | # monitoring |
182 | # monitoring |
183 | |
183 | |
184 | sub g_slave_disconnect($) { |
184 | sub g_disconnect($) { |
185 | my ($node) = @_; |
185 | my ($node) = @_; |
186 | |
186 | |
187 | g_clr $node; |
187 | g_clr $node; |
188 | |
188 | |
189 | if (my $mon = delete $GLOBAL_SLAVE{$node}) { |
189 | if (my $mon = delete $GLOBAL_SLAVE{$node}) { |
… | |
… | |
220 | db_mon "'g" => sub { |
220 | db_mon "'g" => sub { |
221 | keepalive_add $_ for @{ $_[1] }; |
221 | keepalive_add $_ for @{ $_[1] }; |
222 | keepalive_del $_ for @{ $_[3] }; |
222 | keepalive_del $_ for @{ $_[3] }; |
223 | }; |
223 | }; |
224 | |
224 | |
225 | # delete slaves on node-down |
225 | # delete data from other nodes on node-down |
226 | # clear slave db on node-down |
|
|
227 | mon_nodes sub { |
226 | mon_nodes sub { |
228 | g_slave_disconnect $_[0] unless $_[1]; |
227 | g_disconnect $_[0] unless $_[1]; |
229 | }; |
228 | }; |
230 | |
229 | |
231 | # tell everybody who connects that we are a global node |
230 | # tell everybody who connects that we are a global node |
232 | push @AnyEvent::MP::Transport::HOOK_GREET, sub { |
231 | push @AnyEvent::MP::Transport::HOOK_GREET, sub { |
233 | $_[0]{local_greeting}{global} = 1; |
232 | $_[0]{local_greeting}{global} = 1; |
… | |
… | |
275 | g_global_connect $_->{id}; |
274 | g_global_connect $_->{id}; |
276 | } |
275 | } |
277 | } |
276 | } |
278 | |
277 | |
279 | $NODE_REQ{g_global} = sub { |
278 | $NODE_REQ{g_global} = sub { |
280 | g_slave_disconnect $SRCNODE; |
279 | g_disconnect $SRCNODE; |
281 | |
280 | |
282 | my $node = $NODE{$SRCNODE}; |
281 | my $node = $NODE{$SRCNODE}; |
283 | $node->{transport}{remote_greeting}{global} = 1; |
282 | $node->{transport}{remote_greeting}{global} = 1; |
284 | |
283 | |
285 | g_global_connect $SRCNODE; |
284 | g_global_connect $SRCNODE; |