Cluster-Init
view release on metacpan or search on metacpan
lib/Cluster/Init/Daemon.pm view on Meta::CPAN
return (SHUTDOWN);
}
else
{
return (TELL,{group=>$group,level=>$level});
}
}
sub tellgroup
{
my $self=shift;
my $data=shift;
my $group=$data->{group};
my $level=$data->{level};
my $conf=$self->{conf};
debug "tellgroup $group $level";
# first, destroy any groups which are no longer in cltab
# THIS IS NOT A GRACEFUL SHUTDOWN
for my $oldgroup ( keys %{$self->{groups}} )
{
debug "checking $oldgroup";
next if $conf->group($oldgroup);
debug "destroying $oldgroup";
# debug `ps -eaf | tail`;
$self->{groups}{$oldgroup}->destruct;
delete $self->{groups}{$oldgroup};
# debug `ps -eaf | tail`;
}
# now make sure this group is in cltab
unless ( $self->{groups}{$group} || $conf->group($group) )
{
return (GROUP_NOK,{msg=>"no such group: $group"});
}
# make sure group has a DFA
unless ($self->{groups}{$group})
{
debug "creating $group";
my $dfa = Cluster::Init::Group->new
(
group=>$group,
conf=>$conf,
status=>$self->{status}
);
$self->{groups}{$group}=$dfa;
}
$self->{groups}{$group}->tell($level);
$data->{msg}="level transition started";
return (GROUPTOLD,$data);
}
sub haltall
{
my $self=shift;
my $data=shift;
for my $group (keys %{$self->{groups}})
{
debug "halting $group";
$self->{groups}{$group}->halt;
}
$data->{msg}="all groups halting";
$self->timer(HALTTIME,{at=>time+5},$data);
return (HALTED,$data);
}
sub putres
{
my $self=shift;
my $data=shift;
debug dump $data;
my $ldt = $self->ldt;
my $client = $self->client;
$data->{msg}="result unknown" unless $data->{msg};
debug "responding ".$data->{msg};
$ldt->send($data);
$self->ldt(0);
close $client;
return (NOOP,$data);
}
1;
( run in 0.766 second using v1.01-cache-2.11-cpan-39bf76dae61 )