From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 583D81FF16F for ; Tue, 30 Sep 2025 16:20:55 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 899639862; Tue, 30 Sep 2025 16:20:33 +0200 (CEST) From: Daniel Kral To: pve-devel@lists.proxmox.com Date: Tue, 30 Sep 2025 16:19:16 +0200 Message-ID: <20250930142021.366529-10-d.kral@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20250930142021.366529-1-d.kral@proxmox.com> References: <20250930142021.366529-1-d.kral@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1759242004114 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.015 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH ha-manager 6/9] manager: make recompute_online_node_usage use get_service_nodes helper X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" As the previously introduced PVE::HA::Tools::get_used_service_nodes(...) helper reflects the same logic as in recompute_online_node_usage(...), use the helper instead to reduce code duplication. Signed-off-by: Daniel Kral --- src/PVE/HA/Manager.pm | 53 +++++++++---------------------------------- 1 file changed, 11 insertions(+), 42 deletions(-) diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 0226e427..d0d4d0a5 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -240,7 +240,7 @@ sub recompute_online_node_usage { my $haenv = $self->{haenv}; - my $online_nodes = $self->{ns}->list_online_nodes(); + my $online_nodes = { map { $_ => 1 } $self->{ns}->list_online_nodes()->@* }; my $online_node_usage; @@ -248,7 +248,7 @@ sub recompute_online_node_usage { if ($mode eq 'static') { $online_node_usage = eval { my $scheduler = PVE::HA::Usage::Static->new($haenv); - $scheduler->add_node($_) for $online_nodes->@*; + $scheduler->add_node($_) for keys $online_nodes->%*; $haenv->update_static_service_stats(); return $scheduler; }; @@ -266,49 +266,18 @@ sub recompute_online_node_usage { # fallback to the basic algorithm in any case if (!$online_node_usage) { $online_node_usage = PVE::HA::Usage::Basic->new($haenv); - $online_node_usage->add_node($_) for $online_nodes->@*; + $online_node_usage->add_node($_) for keys $online_nodes->%*; } - foreach my $sid (sort keys %{ $self->{ss} }) { + for my $sid (sort keys $self->{ss}->%*) { my $sd = $self->{ss}->{$sid}; - my $state = $sd->{state}; - my $target = $sd->{target}; # optional - if ($online_node_usage->contains_node($sd->{node})) { - if ( - $state eq 'started' - || $state eq 'request_stop' - || $state eq 'fence' - || $state eq 'freeze' - || $state eq 'error' - || $state eq 'recovery' - ) { - $online_node_usage->add_service_usage_to_node($sd->{node}, $sid, $sd->{node}); - } elsif ( - $state eq 'migrate' - || $state eq 'relocate' - || $state eq 'request_start_balance' - ) { - my $source = $sd->{node}; - # count it for both, source and target as load is put on both - if ($state ne 'request_start_balance') { - $online_node_usage->add_service_usage_to_node($source, $sid, $source, $target); - } - if ($online_node_usage->contains_node($target)) { - $online_node_usage->add_service_usage_to_node($target, $sid, $source, $target); - } - } elsif ($state eq 'stopped' || $state eq 'request_start') { - # do nothing - } else { - die "should not be reached (sid = '$sid', state = '$state')"; - } - } elsif (defined($target) && $online_node_usage->contains_node($target)) { - if ($state eq 'migrate' || $state eq 'relocate') { - # to correctly track maintenance modi and also consider the target as used for the - # case a node dies, as we cannot really know if the to-be-aborted incoming migration - # has already cleaned up all used resources - $online_node_usage->add_service_usage_to_node($target, $sid, $sd->{node}, $target); - } - } + my $used_nodes = PVE::HA::Tools::get_used_service_nodes($sd, $online_nodes); + my ($current, $target) = $used_nodes->@{qw(current target)}; + + $online_node_usage->add_service_usage_to_node($current, $sid, $sd->{node}, $sd->{target}) + if $current; + $online_node_usage->add_service_usage_to_node($target, $sid, $sd->{node}, $sd->{target}) + if $target; } $self->{online_node_usage} = $online_node_usage; -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel