$ms->{node_status} = $ns->{status};
$ms->{service_status} = $ss;
$ms->{timestamp} = $haenv->get_time();
-
+
$haenv->write_manager_status($ms);
-}
+}
sub get_service_group {
my ($groups, $online_node_usage, $service_conf) = @_;
}
# overwrite default if service is bound to a specific group
- $group = $groups->{ids}->{$service_conf->{group}} if $service_conf->{group} &&
+ $group = $groups->{ids}->{$service_conf->{group}} if $service_conf->{group} &&
$groups->{ids}->{$service_conf->{group}};
return $group;
}
}
- my @nodes = sort {
+ my @nodes = sort {
$online_node_usage->{$a} <=> $online_node_usage->{$b} || $a cmp $b
} keys %{$pri_groups->{$top_pri}};
sub compute_new_uuid {
my ($state) = @_;
-
+
$uid_counter++;
return md5_base64($state . $$ . time() . $uid_counter);
}
my $sd = $self->{ss}->{$sid};
my $state = $sd->{state};
if (defined($online_node_usage->{$sd->{node}})) {
- if (($state eq 'started') || ($state eq 'request_stop') ||
+ if (($state eq 'started') || ($state eq 'request_stop') ||
($state eq 'fence') || ($state eq 'freeze') || ($state eq 'error')) {
$online_node_usage->{$sd->{node}}++;
} elsif (($state eq 'migrate') || ($state eq 'relocate')) {
$sd->{state} = $new_state;
$sd->{node} = $old_node;
- $sd->{failed_nodes} = $old_failed_nodes;
+ $sd->{failed_nodes} = $old_failed_nodes if defined($old_failed_nodes);
my $text_state = '';
foreach my $k (sort keys %params) {
my $haenv = $self->{haenv};
- my (undef, $type, $id) = PVE::HA::Tools::parse_sid($sid);
+ my (undef, $type, $id) = $haenv->parse_sid($sid);
my $plugin = PVE::HA::Resources->lookup($type);
# should not happen
}
};
-# read LRM status for all nodes
+# read LRM status for all nodes
sub read_lrm_status {
my ($self) = @_;
}
}
-
+
return ($results, $modes);
}
my ($haenv, $ms, $ns, $ss) = ($self->{haenv}, $self->{ms}, $self->{ns}, $self->{ss});
my $cmdlist = $haenv->read_crm_commands();
- return if !defined($cmdlist);
foreach my $cmd (split(/\n/, $cmdlist)) {
chomp $cmd;
if ($cmd =~ m/^(migrate|relocate)\s+(\S+)\s+(\S+)$/) {
- my ($task, $sid, $node) = ($1, $2, $3);
+ my ($task, $sid, $node) = ($1, $2, $3);
if (my $sd = $ss->{$sid}) {
if (!$ns->node_is_online($node)) {
$haenv->log('err', "crm command error - node not online: $cmd");
} else {
if ($node eq $sd->{node}) {
$haenv->log('info', "ignore crm command - service already on target node: $cmd");
- } else {
+ } else {
$haenv->log('info', "got crm command: $cmd");
$ss->{$sid}->{cmd} = [ $task, $node];
}
for (;;) {
my $repeat = 0;
-
+
$self->recompute_online_node_usage();
foreach my $sid (sort keys %$ss) {
# this can happen if we fence a node with active migrations
# hack: modify $sd (normally this should be considered read-only)
$haenv->log('info', "fixup service '$sid' location ($sd->{node} => $cd->{node})");
- $sd->{node} = $cd->{node};
+ $sd->{node} = $cd->{node};
}
if ($sd->{cmd}) {
return;
}
} else {
- $haenv->log('err', "unknown command '$cmd' for service '$sid'");
+ $haenv->log('err', "unknown command '$cmd' for service '$sid'");
}
}
}
return;
}
-
+
if ($cd->{state} eq 'disabled' || $cd->{state} eq 'stopped') {
&$change_service_state($self, $sid, 'request_stop');
return;
&$change_service_state($self, $sid, $cmd, node => $sd->{node}, target => $target);
}
} else {
- $haenv->log('err', "unknown command '$cmd' for service '$sid'");
+ $haenv->log('err', "unknown command '$cmd' for service '$sid'");
}
} else {