App-Context
view release on metacpan or search on metacpan
lib/App/Context/ClusterNode.pm view on Meta::CPAN
method => $3,
);
my $args = $4;
$event{args} = $self->{rpc_serializer}->deserialize($args) if ($args ne "");
my $event_token = $self->send_async_event({method => "process_async_event", args => [\%event],});
$event{event_token} = $event_token;
$return_value = "ASYNC-EVENT-TOKEN:$event_token\n";
}
elsif ($msg =~ /^CONTROLLER-UP:/) {
my $controller_host = $self->{controller_host};
my $controller_port = $self->{controller_port};
my $node_host = $self->{host};
my $node_port = $self->{port};
$self->send_async_event({
method => "send_async_message",
args => [ $controller_host, $controller_port, "NODE-UP:$node_host:$node_port" ],
});
$return_value = "OK";
}
elsif ($msg =~ /^ABORT-ASYNC-EVENT:(.*)/) {
my $event_token = $1;
$self->abort_async_event($event_token);
$return_value = "OK";
}
else {
$return_value = "ERROR: unknown [$msg]";
}
}
&App::sub_exit($return_value) if ($App::trace);
return($return_value);
}
# Can be overridden to provide customized processing.
sub process_custom_msg {
&App::sub_entry if ($App::trace);
my ($self, $msg) = @_;
my $return_value = "";
&App::sub_exit($return_value) if ($App::trace);
return($return_value);
}
sub state {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $datetime = time2str("%Y-%m-%d %H:%M:%S", time());
my $state = "Cluster Node: $self->{host}:$self->{port} procs[$self->{num_procs}/$self->{max_procs}:max] async_events[$self->{num_async_events}/$self->{max_async_events}:max]\n[$datetime]\n";
$state .= "\n";
$state .= $self->_state();
&App::sub_exit($state) if ($App::trace);
return($state);
}
sub _state {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $state = "";
$state .= $self->SUPER::_state();
&App::sub_exit($state) if ($App::trace);
return($state);
}
sub process_async_event {
&App::sub_entry if ($App::trace);
my ($self, $event) = @_;
my ($results);
eval {
$results = $self->send_event($event);
};
if ($@) {
$results = $@;
}
$results =~ s/\s*\n\s*/ /gs; # we can't have multi-line result text
my $results_txt = $self->{rpc_serializer}->serialize($results);
my $msg = "ASYNC-EVENT-RESULTS:$event->{event_token}:$results_txt";
$self->send_message($self->{controller_host}, $self->{controller_port}, $msg);
&App::sub_exit() if ($App::trace);
}
sub finish_killed_async_event {
&App::sub_entry if ($App::trace);
my ($self, $event) = @_;
my $results_txt = $self->{rpc_serializer}->serialize("Subrequest Killed");
my $msg = "ASYNC-EVENT-RESULTS:$event->{event_token}:$results_txt";
$self->send_async_message($self->{controller_host}, $self->{controller_port}, $msg);
&App::sub_exit() if ($App::trace);
}
1;
( run in 0.589 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )