--- AnyEvent-MP/MP/Node.pm 2009/08/05 09:38:56 1.11 +++ AnyEvent-MP/MP/Node.pm 2009/08/08 21:56:29 1.15 @@ -56,9 +56,6 @@ sub monitor { my ($self, $portid, $cb) = @_; - return $cb->(transport_error => "node unreachable") - if $self->{failed}; - my $list = $self->{lmon}{$portid} ||= []; $self->send (["", mon1 => $portid]) @@ -87,20 +84,10 @@ $self->clr_transport if $self->{transport}; - if ( - exists $self->{remote_uniq} - && $self->{remote_uniq} ne $transport->{remote_uniq} - ) { - # uniq changed, different node - $self->fail ("node restart detected"); - } - delete $self->{trial}; delete $self->{next_connect}; - delete $self->{failed}; - $self->{remote_uniq} = $transport->{remote_uniq}; - $self->{transport} = $transport; + $self->{transport} = $transport; $transport->send ($_) for @{ delete $self->{queue} || [] }; @@ -111,8 +98,6 @@ delete $self->{queue}; - $self->{failed} = 1; - if (my $mon = delete $self->{lmon}) { $_->(@reason) for map @$_, values %$mon; } @@ -165,12 +150,22 @@ }; } +package AnyEvent::MP::Node::Slave; + +use base "AnyEvent::MP::Node::Direct"; + +sub connect { + my ($self) = @_; + + $self->fail (transport_error => $self->{noderef}, "unable to connect to slave node"); +} + package AnyEvent::MP::Node::Self; use base "AnyEvent::MP::Node"; sub set_transport { - die "FATAL error, set_transport was called"; + Carp::confess "FATAL error, set_transport was called on local node"; } sub send { @@ -194,7 +189,7 @@ sub monitor { my ($self, $portid, $cb) = @_; - return $cb->() + return $cb->(no_such_port => "cannot monitor nonexistent port") unless exists $AnyEvent::MP::Base::PORT{$portid}; $AnyEvent::MP::Base::LMON{$portid}{$cb+0} = $cb;