all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: "Michael Köppl" <m.koeppl@proxmox.com>
To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com>
Cc: "pve-devel" <pve-devel-bounces@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH ha-manager v3 4/8] rules: resource affinity: decouple get_resource_affinity helper from Usage class
Date: Mon, 03 Nov 2025 16:50:24 +0100	[thread overview]
Message-ID: <DDZ6GGB1XTNX.1XC2RTAJJ9K09@proxmox.com> (raw)
In-Reply-To: <20251027164513.542678-8-d.kral@proxmox.com>

On Mon Oct 27, 2025 at 5:43 PM CET, Daniel Kral wrote:
> -=head3 get_resource_affinity($rules, $sid, $online_node_usage)
> +=head3 get_resource_affinity($rules, $sid, $ss, $online_nodes)
>  
>  Returns a list of two hashes, where the first describes the positive resource
>  affinity and the second hash describes the negative resource affinity for
> -resource C<$sid> according to the resource affinity rules in C<$rules> and the
> -resource locations in C<$online_node_usage>.
> +resource C<$sid> according to the resource affinity rules in C<$rules>, the
> +service status C<$ss> and the C<$online_nodes> hash.
>  
>  For the positive resource affinity of a resource C<$sid>, each element in the
>  hash represents an online node, where other resources, which C<$sid> is in
> @@ -529,8 +530,8 @@ resource C<$sid> is in a negative affinity with, the returned value will be:
>  
>  =cut
>  
> -sub get_resource_affinity : prototype($$$) {
> -    my ($rules, $sid, $online_node_usage) = @_;
> +sub get_resource_affinity : prototype($$$$) {
> +    my ($rules, $sid, $ss, $online_nodes) = @_;
>  
>      my $together = {};
>      my $separate = {};
> @@ -543,14 +544,16 @@ sub get_resource_affinity : prototype($$$) {
>              for my $csid (keys %{ $rule->{resources} }) {
>                  next if $csid eq $sid;
>  
> -                my $nodes = $online_node_usage->get_service_nodes($csid);
> -
> -                next if !$nodes || !@$nodes; # skip unassigned nodes
> +                my ($state, $node, $target) = $ss->{$csid}->@{qw(state node target)};

During my testing of your other series [0], I noticed a problem with
resources that are set to 'ignored'. $state is undefined if the
resource is set to ignored because AFAICT its corresponding entry in $ss
is removed in the loop that removes stale or ignored service in the
manage function. This results in the following warning being printed
repeatedly:

Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: removing stale service 'ct:101' (ignored state requested)
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 77.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 77.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 81.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 94.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 94.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $state in string eq at /usr/share/perl5/PVE/HA/Usage.pm line 94.
Nov 03 16:37:07 pve-trixbuild02 pve-ha-crm[122707]: Use of uninitialized value $service_state in string ne at /usr/share/perl5/PVE/HA/Manager.pm line 816.

This can be reproduced with the following scenario:
- Add 2 resources (for resource affinity rules), setting 1 to ignored
- Create a resource affinity rule

This also results in another problem when then trying to set the
resource to any other state again. The resource cannot be set to the
other state and remains 'queued', showing the following error in the
pve-ha-crm journal.

Nov 03 16:42:27 pve-trixbuild02 pve-ha-crm[122707]: got unexpected error - unknown service state '' at /usr/share/perl5/PVE/HA/Manager.pm line 798.

Not entirely certain that my reasoning why this is happening is correct,
though.

[0] https://lore.proxmox.com/pve-devel/20251103102118.153666-1-d.kral@proxmox.com

> +                my ($current_node, $target_node) =
> +                    PVE::HA::Usage::get_used_service_nodes($online_nodes, $state, $node, $target);
>  
>                  if ($rule->{affinity} eq 'positive') {
> -                    $together->{$_}++ for @$nodes;
> +                    $together->{$current_node}++ if defined($current_node);
> +                    $together->{$target_node}++ if defined($target_node);


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


  reply	other threads:[~2025-11-03 15:49 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-27 16:43 [pve-devel] [PATCH ha-manager/perl-rs/proxmox v3 00/11] Granular online_node_usage accounting Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH proxmox v3 1/1] resource-scheduling: change score_nodes_to_start_service signature Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH perl-rs v3 1/2] pve-rs: resource_scheduling: allow granular usage changes Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH perl-rs v3 2/2] test: resource_scheduling: use score_nodes helper to imitate HA Manager Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 1/8] manager: remove redundant recompute_online_node_usage from next_state_recovery Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 2/8] manager: remove redundant add_service_usage_to_node " Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 3/8] manager: remove redundant add_service_usage_to_node from next_state_started Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 4/8] rules: resource affinity: decouple get_resource_affinity helper from Usage class Daniel Kral
2025-11-03 15:50   ` Michael Köppl [this message]
2025-11-03 16:01     ` Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 5/8] manager: make recompute_online_node_usage use add_service_usage helper Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 6/8] usage: allow granular changes to Usage implementations Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 7/8] manager: make online node usage computation granular Daniel Kral
2025-10-27 16:43 ` [pve-devel] [PATCH ha-manager v3 8/8] implement static service stats cache Daniel Kral

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=DDZ6GGB1XTNX.1XC2RTAJJ9K09@proxmox.com \
    --to=m.koeppl@proxmox.com \
    --cc=pve-devel-bounces@lists.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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal