From: Daniel Kral <d.kral@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH ha-manager v3 11/17] manager: store global reference to service config hash
Date: Mon, 11 May 2026 11:46:32 +0200 [thread overview]
Message-ID: <20260511094707.142930-12-d.kral@proxmox.com> (raw)
In-Reply-To: <20260511094707.142930-1-d.kral@proxmox.com>
This is in preparation for an upcoming patch, which makes
get_resource_motion_info() aware of the HA resources' failback flag in
conjunction with node affinity rules.
This change is chosen in favor of passing down the $sc variable through
several method calls that otherwise wouldn't need a reference to the
service config hash in the upcoming patch.
Signed-off-by: Daniel Kral <d.kral@proxmox.com>
---
changes v2 -> v3:
- new
src/PVE/HA/Manager.pm | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm
index 2d1c6d5d..c4088dac 100644
--- a/src/PVE/HA/Manager.pm
+++ b/src/PVE/HA/Manager.pm
@@ -82,6 +82,7 @@ sub new {
$self->{ns} = PVE::HA::NodeStatus->new($haenv, $old_ms->{node_status} || {});
# fixme: use separate class PVE::HA::ServiceStatus
+ $self->{sc} = {};
$self->{ss} = $old_ms->{service_status} || {};
$self->{ms} = { master_node => $haenv->nodename() };
@@ -1002,7 +1003,7 @@ sub manage {
$self->try_persistent_group_migration();
- my ($sc, $services_digest) = $haenv->read_service_config();
+ ($self->{sc}, my $services_digest) = $haenv->read_service_config();
$self->{groups} = $haenv->read_group_config(); # update
@@ -1011,9 +1012,9 @@ sub manage {
# skip service add/remove when disarmed - handle_disarm manages service status
if (!$ms->{disarm}) {
# add new service
- foreach my $sid (sort keys %$sc) {
+ foreach my $sid (sort keys $self->{sc}->%*) {
next if $ss->{$sid}; # already there
- my $cd = $sc->{$sid};
+ my $cd = $self->{sc}->{$sid};
next if $cd->{state} eq 'ignored';
$haenv->log('info', "adding new service '$sid' on node '$cd->{node}'");
@@ -1028,9 +1029,10 @@ sub manage {
# remove stale or ignored services from manager state
foreach my $sid (keys %$ss) {
- next if $sc->{$sid} && $sc->{$sid}->{state} ne 'ignored';
+ my $cd = $self->{sc}->{$sid};
+ next if $cd && $cd->{state} ne 'ignored';
- my $reason = defined($sc->{$sid}) ? 'ignored state requested' : 'no config';
+ my $reason = defined($cd) ? 'ignored state requested' : 'no config';
$haenv->log('info', "removing stale service '$sid' ($reason)");
# remove all service related state information
@@ -1043,7 +1045,7 @@ sub manage {
my $new_rules = $haenv->read_rules_config();
# TODO PVE 10: Remove group migration when HA groups have been fully migrated to rules
- PVE::HA::Groups::migrate_groups_to_resources($self->{groups}, $sc);
+ PVE::HA::Groups::migrate_groups_to_resources($self->{groups}, $self->{sc});
if (
!$self->{compiled_rules}
@@ -1052,7 +1054,7 @@ sub manage {
|| $self->{groups}->{digest} ne $self->{last_groups_digest}
|| $services_digest && $services_digest ne $self->{last_services_digest}
) {
- PVE::HA::Groups::migrate_groups_to_rules($new_rules, $self->{groups}, $sc);
+ PVE::HA::Groups::migrate_groups_to_rules($new_rules, $self->{groups}, $self->{sc});
my $nodes = $self->{ns}->list_nodes();
my $messages = PVE::HA::Rules->transform($new_rules, $nodes);
@@ -1088,7 +1090,7 @@ sub manage {
foreach my $sid (sort keys %$ss) {
next if $deferred_sids && !$deferred_sids->{$sid};
my $sd = $ss->{$sid};
- my $cd = $sc->{$sid} || { state => 'disabled' };
+ my $cd = $self->{sc}->{$sid} || { state => 'disabled' };
my $lrm_res = $sd->{uid} ? $lrm_results->{ $sd->{uid} } : undef;
--
2.47.3
next prev parent reply other threads:[~2026-05-11 9:48 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 9:46 [PATCH-SERIES container/ha-manager/manager/qemu-server v3 00/17] HA node affinity blockers (#1497) Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 01/17] ha: put source files on individual new lines Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 02/17] d/pve-ha-manager.install: remove duplicate Config.pm Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 03/17] config: group and sort use statements Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 04/17] manager: " Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 05/17] manager: report all reasons when resources are blocked from migration Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 06/17] config, manager: factor out resource motion info logic Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 07/17] tests: add test cases for migrating resources with node affinity rules Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 08/17] fix #1497: handle strict node affinity rules in manual migrations Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 09/17] config: improve variable names in read_and_check_resources_config Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 10/17] config: factor out checked_resources_config helper Daniel Kral
2026-05-11 9:46 ` Daniel Kral [this message]
2026-05-11 9:46 ` [PATCH ha-manager v3 12/17] manager: remove duplicate service config read in update_crm_commands Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 13/17] fix #1497: handle node affinity rules with failback in manual migrations Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 14/17] config: remove duplicate config reads in get_resource_motion_info Daniel Kral
2026-05-11 9:46 ` [PATCH qemu-server v3 15/17] api: migration preconditions: add node affinity as blocking cause Daniel Kral
2026-05-11 9:46 ` [PATCH container v3 16/17] " Daniel Kral
2026-05-11 9:46 ` [PATCH manager v3 17/17] ui: migrate: display precondition messages for ha node affinity Daniel Kral
2026-05-15 4:51 ` applied: [PATCH-SERIES container/ha-manager/manager/qemu-server v3 00/17] HA node affinity blockers (#1497) Thomas Lamprecht
2026-05-15 5:04 ` Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260511094707.142930-12-d.kral@proxmox.com \
--to=d.kral@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.