]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
recovery: allow disabling a in-recovery service
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 2 Jul 2021 17:51:31 +0000 (19:51 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 2 Jul 2021 18:08:12 +0000 (20:08 +0200)
Mostly for convenience for the admin, to avoid the need for removing
it completely, which is always frowned uppon by most users.

Follows the same logic and safety criteria as the transition to
`stopped` on getting into the `disabled` state in the
`next_state_error`.

As we previously had a rather immediate transition from recovery ->
error (not anymore) this is actually restoring a previous feature and
does not adds new implications or the like.

Still, add a test which also covers that the recovery state does not
allows things like stop or migrate to happen.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/HA/Manager.pm
src/test/test-recovery4/README
src/test/test-recovery4/log.expect

index 1d646b20ae1e269c09f6ba2ca8bc63d2416449af..1c66b43563b48fb0f0094901f8ba90d2d14516cb 100644 (file)
@@ -829,6 +829,13 @@ sub next_state_recovery {
     } else {
        # no possible node found, cannot recover - but retry later, as we always try to make it available
        $haenv->log('err', "recovering service '$sid' from fenced node '$fenced_node' failed, no recovery node found");
+
+       if ($cd->{state} eq 'disabled') {
+           # allow getting a service out of recovery manually if an admin disables it.
+           delete $sd->{failed_nodes}; # clean up on recovery to stopped
+           $change_service_state->($self, $sid, 'stopped'); # must NOT go through request_stop
+           return;
+       }
     }
 }
 
index 98c248b5fa1057790a6ee874e6e928b00f08062a..932e187f0115b99bd1fa0d69032a6508495c4d1c 100644 (file)
@@ -4,4 +4,6 @@ like `migration`, `stop` and finally a `disable`
 
 Expected Result:
 Try recovery continuosly, ignore the migrate and stop command, we cannot honor
-them for a in `recovery` service. For now also the `disabled` one is a no-op.
+them for a in `recovery` service. Only the `disabled` one can get us out here,
+besides, naturally, if a recovery node would be found or the service would get
+deleted from the HA resource configuration completely.
index 599acf64f2e9ae0dd50393d9d67847294e79387b..6380c8e471b16b6a35d138338aa0f436fd0a2be1 100644 (file)
@@ -56,33 +56,5 @@ err     480    node1/crm: recovering service 'vm:102' from fenced node 'node2' f
 err     500    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
 info    520      cmdlist: execute service vm:102 disabled
 err     520    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     540    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     560    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     580    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     600    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     620    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     640    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     660    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     680    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     700    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     720    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     740    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     760    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     780    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     800    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     820    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     840    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     860    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     880    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     900    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     920    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     940    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     960    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err     980    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err    1000    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err    1020    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err    1040    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err    1060    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err    1080    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
-err    1100    node1/crm: recovering service 'vm:102' from fenced node 'node2' failed, no recovery node found
+info    520    node1/crm: service 'vm:102': state changed from 'recovery' to 'stopped'
 info   1120     hardware: exit simulation - done