]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
improve crm state transitions
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 16 Feb 2015 09:26:17 +0000 (10:26 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 16 Feb 2015 09:26:17 +0000 (10:26 +0100)
PVE/HA/Manager.pm

index fe884cfe8758038d84ad6ce4b89d8efbb57407dd..ab7d7151e5d291167e3a9449a876d3ed409ecd5f 100644 (file)
@@ -84,28 +84,30 @@ my $change_service_state = sub {
     my $sd = $ss->{$sid} || die "no such service '$sid";
 
     my $old_state = $sd->{state};
+    my $old_node = $sd->{node};
 
     die "no state change" if $old_state eq $new_state; # just to be sure
 
     die "invalid CRM service state '$new_state'\n" if !$valid_service_states->{$new_state};
 
-    my $changes = '';
+    foreach my $k (keys %$sd) { delete $sd->{$k}; };
+
+    $sd->{state} = $new_state;
+    $sd->{node} = $old_node;
+
+    my $text_state = '';
     foreach my $k (keys %params) {
        my $v = $params{$k};
-       next if defined($sd->{$k}) && $sd->{$k} eq $v;
-       $changes .= ", " if $changes;
-       $changes .= "$k = $v";
+       $text_state .= ", " if $text_state;
+       $text_state .= "$k = $v";
        $sd->{$k} = $v;
     }
     
-    $sd->{state} = $new_state;
     $uid_counter++;
     $sd->{uid} = md5_base64($new_state . $$ . time() . $uid_counter);
 
-    # fixme: cleanup state (remove unused values)
-
-    $changes = " ($changes)" if $changes;
-    $haenv->log('info', "service '$sid': state changed to '$new_state' $changes\n");
+    $text_state = " ($text_state)" if $text_state;
+    $haenv->log('info', "service '$sid': state changed from '${old_state}' to '${new_state}' $text_state\n");
 };
 
 # read LRM status for all active nodes