X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2FPVE%2FHA%2FManager.pm;h=0b90de4baf1c5e0b417472c618cb3aae8af4d868;hb=ea998b07ef72d45ce5afb2d4d80f3f09fe5a5623;hp=2933926ae47ed49006d743bfd7702d3a3577bc13;hpb=bf7febe3771d6f9a2aef97bcd6eab4ece098c5aa;p=pve-ha-manager.git diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 2933926..0b90de4 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -43,9 +43,9 @@ sub flush_master_status { $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) = @_; @@ -57,7 +57,7 @@ sub get_service_group { } # 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; @@ -118,7 +118,7 @@ sub select_service_node { } } - my @nodes = sort { + my @nodes = sort { $online_node_usage->{$a} <=> $online_node_usage->{$b} || $a cmp $b } keys %{$pri_groups->{$top_pri}}; @@ -152,7 +152,7 @@ my $uid_counter = 0; sub compute_new_uuid { my ($state) = @_; - + $uid_counter++; return md5_base64($state . $$ . time() . $uid_counter); } @@ -183,7 +183,7 @@ sub recompute_online_node_usage { 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')) { @@ -218,7 +218,7 @@ my $change_service_state = sub { $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) { @@ -243,7 +243,7 @@ my $fence_recovery_cleanup = sub { 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 @@ -299,7 +299,7 @@ my $recover_fenced_service = sub { } }; -# read LRM status for all nodes +# read LRM status for all nodes sub read_lrm_status { my ($self) = @_; @@ -317,7 +317,7 @@ sub read_lrm_status { } } - + return ($results, $modes); } @@ -328,20 +328,19 @@ sub update_crm_commands { 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]; } @@ -405,7 +404,7 @@ sub manage { for (;;) { my $repeat = 0; - + $self->recompute_online_node_usage(); foreach my $sid (sort keys %$ss) { @@ -559,7 +558,7 @@ sub next_state_stopped { # 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}) { @@ -577,7 +576,7 @@ sub next_state_stopped { return; } } else { - $haenv->log('err', "unknown command '$cmd' for service '$sid'"); + $haenv->log('err', "unknown command '$cmd' for service '$sid'"); } } @@ -631,7 +630,7 @@ sub next_state_started { } return; } - + if ($cd->{state} eq 'disabled' || $cd->{state} eq 'stopped') { &$change_service_state($self, $sid, 'request_stop'); return; @@ -653,7 +652,7 @@ sub next_state_started { &$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 {