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 )