foreach my $sid (keys %{$self->{workers}}) {
last if $count >= $max_workers;
my $w = $self->{workers}->{$sid};
- my $cd = $sc->{$sid};
- if (!$cd) {
- $haenv->log('err', "missing resource configuration for '$sid'");
- next;
- }
if (!$w->{pid}) {
if ($haenv->can_fork()) {
my $pid = fork();
# do work
my $res = -1;
eval {
- $res = $self->exec_resource_agent($sid, $cd, $w->{state}, $w->{target});
+ $res = $self->exec_resource_agent($sid, $sc->{$sid}, $w->{state}, $w->{target});
};
if (my $err = $@) {
$haenv->log('err', $err);
} else {
my $res = -1;
eval {
- $res = $self->exec_resource_agent($sid, $cd, $w->{state}, $w->{target});
+ $res = $self->exec_resource_agent($sid, $sc->{$sid}, $w->{state}, $w->{target});
$res = $res << 8 if $res > 0;
};
if (my $err = $@) {
my $tries = $self->{restart_tries};
my $sc = $haenv->read_service_config();
- my $cd = $sc->{$sid};
+
+ my $max_restart = 0;
+
+ if (my $cd = $sc->{$sid}) {
+ $max_restart = $cd->{max_restart};
+ }
if ($cmd eq 'started') {
$tries->{$sid} = 0 if !defined($tries->{$sid});
$tries->{$sid}++;
- if ($tries->{$sid} >= $cd->{max_restart}) {
+ if ($tries->{$sid} >= $max_restart) {
$haenv->log('err', "unable to start service $sid on local node".
" after $tries->{$sid} retries");
$tries->{$sid} = 0;
return EUNKNOWN_SERVICE_TYPE;
}
+ if (!$service_config) {
+ $haenv->log('err', "missing resource configuration for '$sid'");
+ return EUNKNOWN_SERVICE;
+ }
+
if ($service_config->{node} ne $nodename) {
$haenv->log('err', "service '$sid' not on this node");
return EWRONG_NODE;
EUNKNOWN_SERVICE_TYPE => 4, # no plugin for this type service found
EUNKNOWN_COMMAND => 5,
EINVALID_PARAMETER => 6,
+ EUNKNOWN_SERVICE => 7, # service not found
};
# get constants out of package in a somewhat easy way
use base 'Exporter';
our @EXPORT_OK = qw(SUCCESS ERROR EWRONG_NODE EUNKNOWN_SERVICE_TYPE
- EUNKNOWN_COMMAND EINVALID_PARAMETER ETRY_AGAIN);
+ EUNKNOWN_COMMAND EINVALID_PARAMETER ETRY_AGAIN EUNKNOWN_SERVICE);
our %EXPORT_TAGS = ( 'exit_codes' => [@EXPORT_OK] );
PVE::JSONSchema::register_format('pve-ha-resource-id', \&pve_verify_ha_resource_id);