The migration process from HA groups to HA rules might require a lot of
small updates to individual HA resource configs. These updates have been
done per-HA resource, which is quite inefficient and can cause the CRM
to fail to update its watchdog in time.

Even though this is a one-off procedure, it is part of the HA Manager
state machine and must be done in a single action to prevent reading
from an partially updated resource config, i.e., no forking or splitting
the task over multiple HA Manager rounds.

Therefore use the bulk capability of update_resources_config(...) to
remove the group fields and migrate the failback flag for all HA
resources in a single read-update-write operation.

Signed-off-by: Daniel Kral <[email protected]>
---
 src/PVE/HA/Manager.pm | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm
index f55d5870..bf368efd 100644
--- a/src/PVE/HA/Manager.pm
+++ b/src/PVE/HA/Manager.pm
@@ -579,16 +579,15 @@ my $migrate_group_persistently = sub {
         $haenv->log('notice', "ha groups migration: migration to rules config 
successful");
 
         PVE::HA::Groups::migrate_groups_to_resources($groups, $resources);
+        my $changes = {};
         for my $sid (keys %$resources) {
             # prevent unnecessary updates for HA resources that do not change
             next if !defined($resources->{$sid}->{group});
 
-            my $changes = {};
             $changes->{$sid} = {};
             $changes->{$sid}->{failback} = 0 if 
!$resources->{$sid}->{failback};
-
-            $haenv->update_service_config($changes, 'group');
         }
+        $haenv->update_service_config($changes, 'group');
         $haenv->log('notice', "ha groups migration: migration to resources 
config successful");
 
         $haenv->delete_group_config();
-- 
2.47.3



_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to