public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Fiona Ebner <f.ebner@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH ha-manager 09/15] manager: apply colocation rules when selecting service nodes
Date: Fri, 2 May 2025 11:33:06 +0200	[thread overview]
Message-ID: <d00a08d7-25a2-453e-8958-f2fbff120a4c@proxmox.com> (raw)
In-Reply-To: <00c570a5-e426-4b5a-93e3-8eaac9e96944@proxmox.com>

Am 30.04.25 um 13:09 schrieb Daniel Kral:
> On 3/25/25 16:12, Daniel Kral wrote:
>>   sub select_service_node {
>> -    my ($groups, $online_node_usage, $sid, $service_conf,
>> $current_node, $try_next, $tried_nodes, $maintenance_fallback,
>> $best_scored) = @_;
>> +    # TODO Cleanup this signature post-RFC
>> +    my ($rules, $groups, $online_node_usage, $sid, $service_conf,
>> $current_node, $try_next, $tried_nodes, $maintenance_fallback,
>> $best_scored) = @_;
> 
> I'm currently trying to clean up the helper's signature here, but doing
> something like
> 
> sub select_service_node {
>     my ($service_info, $affinity_info, $try_next, $best_scored) = @_;
> 
>     my ($sid, $service_conf, $current_node) = $service_info->@{qw(sid
> config current_node)};
>     my ($rules, $groups, $online_node_usage, $tried_nodes,
> $maintenance_fallback) =
>     $affinity_info->@{qw(rules groups online_node_usage failed_nodes
> maintenance_node)};
> 
> would require us to create helper structures on all four call sites (one
> of them is just the test case ./test_failover1.pl), or introduce another
> helper to just create them for passing it here and immediately de-
> structuring it in select_service_node(...):
> 
> sub get_service_affinity_info {
>     my ($self, $sid, $cd, $sd) = @_;
> 
>     my $service_info = {
>     sid => $sid,
>     config => $cd,
>     current_node => $sd->{node},
>     };
> 
>     my $affinity_info = {
>     rules => $self->{rules},
>     groups => $self->{groups},
>     failed_nodes => $sd->{failed_nodes},
>     maintenance_node => $sd->{maintenance_node},
>     online_node_usage => $self->{online_node_usage},
>     };
> 
>     return ($service_info, $affinity_info);
> };
> 
> Also the call site in next_state_recovery(...) does not pass $sd-
>>{failed_nodes}, $sd->{maintenance_node} and $best_scored to it. AFAICS
> $sd->{failed_nodes} should be undef in next_state_recovery(...) anyway,
> but I feel like I have missed some states it could be in there. And $sd-
>>{maintenance_node} could be set anytime.

I think it makes sense to have it explicitly (rather than just
implicitly) opt-out of $try_next just like the caller for
rebalance_on_request_start. Without $try_next, the $tried_nodes
parameter does not have any effect (the caller for
rebalance_on_request_start passes it, but select_service_node() won't
read it if $try_next isn't set).

The caller in next_state_recovery() should also pass $best_scored IMHO,
so that it is fully aligned with the caller for
rebalance_on_request_start. It won't be an actual change result-wise,
because for recovery, the current node is not available, so it already
cannot be the result, but it makes sense semantically. We want the best
scored node for recovery. And having the two callers look the same is a
simplification too.

> If there's nothing speaking against that, I'd prefer to elevate
> select_service_node(...) to be a method as it needs quite a lot of state
> anyway, especially as we will need global information about other
> services than just the current one in the future anyway.

I don't have strong feelings about this, both approaches seem fine to me.

> So, I'd do something like
> 
> sub select_service_node {
>     my ($self, $sid, $service_conf, $sd, $mode) = @_;
> 
>     my ($rules, $groups, $online_node_usage) = $self->@{qw(rules groups
> online_node_usage)};

If we don't want to make it a method, we could still pass these ones
separately. After implementing location rules, $groups would be dropped
anyways.

>     my ($current_node, $tried_nodes, $maintenance_fallback) = $self-
>>@{qw(node failed_nodes maintenance_node)};

It's $sd->... here.

> here. It's not fancy as in there's a well-defined interface one can
> immediately see what this helper needs (as it has access to the whole
> $self) and doesn't have the guarantees of a standalone helper (won't
> touch $self), but I think it could be better than creating helper
> structures which are only pass a message, which is immediately
> destructured anyway. We could also just pass $self slightly differently,
> but I don't see much difference there.
> 
> The $mode could then be a enumeration of e.g. whether $try_next (e.g.
> 'try_again') or $best_scored (e.g. 'rebalance') is used (and can be

Having a mode sounds good to me. I don't think it should be called
'rebalance', the best-scored semantics should apply to recovery too, see
above.

> extended of course). Those are mutually exclusive in the three call
> sites right now. If next_state_recovery(...) really does have states
> where $tried_nodes is set (and $maintenance_node too), then we can also
> introduce a 'recovery' state, which will ignore them.
> 
> The names for $service_conf and $sd can also be improved, but I wanted
> to introduce minimal change to select_service_node(...) as well as stay
> to the $sd name for the service data as in other places of the Manager.pm.
> 
> That's still just a work in progress and I'd very appreciate some
> feedback if any of the two above are viable options here. If it helps
> any, I'd send the result as a separate series in advance which the HA
> colocation will then be based on, so we don't loose focus in the HA
> colocation patch series.
> 
> CC'd @Fiona and @Fabian here, if you have any thoughts here :).



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

  reply	other threads:[~2025-05-02  9:33 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-25 15:12 [pve-devel] [RFC cluster/ha-manager 00/16] HA colocation rules Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH cluster 1/1] cfs: add 'ha/rules.cfg' to observed files Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 01/15] ignore output of fence config tests in tree Daniel Kral
2025-03-25 17:49   ` [pve-devel] applied: " Thomas Lamprecht
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 02/15] tools: add hash set helper subroutines Daniel Kral
2025-03-25 17:53   ` Thomas Lamprecht
2025-04-03 12:16     ` Fabian Grünbichler
2025-04-11 11:24       ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 03/15] usage: add get_service_node and pin_service_node methods Daniel Kral
2025-04-24 12:29   ` Fiona Ebner
2025-04-25  7:39     ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 04/15] add rules section config base plugin Daniel Kral
2025-04-24 13:03   ` Fiona Ebner
2025-04-25  8:29     ` Daniel Kral
2025-04-25  9:12       ` Fiona Ebner
2025-04-25 13:30         ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 05/15] rules: add colocation rule plugin Daniel Kral
2025-04-03 12:16   ` Fabian Grünbichler
2025-04-11 11:04     ` Daniel Kral
2025-04-25 14:06       ` Fiona Ebner
2025-04-29  8:37         ` Daniel Kral
2025-04-29  9:15           ` Fiona Ebner
2025-05-07  8:41             ` Daniel Kral
2025-04-25 14:05   ` Fiona Ebner
2025-04-29  8:44     ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 06/15] config, env, hw: add rules read and parse methods Daniel Kral
2025-04-25 14:11   ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 07/15] manager: read and update rules config Daniel Kral
2025-04-25 14:30   ` Fiona Ebner
2025-04-29  8:04     ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 08/15] manager: factor out prioritized nodes in select_service_node Daniel Kral
2025-04-28 13:03   ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 09/15] manager: apply colocation rules when selecting service nodes Daniel Kral
2025-04-03 12:17   ` Fabian Grünbichler
2025-04-11 15:56     ` Daniel Kral
2025-04-28 12:46       ` Fiona Ebner
2025-04-29  9:07         ` Daniel Kral
2025-04-29  9:22           ` Fiona Ebner
2025-04-28 12:26   ` Fiona Ebner
2025-04-28 14:33     ` Fiona Ebner
2025-04-29  9:39       ` Daniel Kral
2025-04-29  9:50     ` Daniel Kral
2025-04-30 11:09   ` Daniel Kral
2025-05-02  9:33     ` Fiona Ebner [this message]
2025-05-07  8:31       ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 10/15] sim: resources: add option to limit start and migrate tries to node Daniel Kral
2025-04-28 13:20   ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 11/15] test: ha tester: add test cases for strict negative colocation rules Daniel Kral
2025-04-28 13:44   ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 12/15] test: ha tester: add test cases for strict positive " Daniel Kral
2025-04-28 13:51   ` Fiona Ebner
2025-05-09 11:22     ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 13/15] test: ha tester: add test cases for loose " Daniel Kral
2025-04-28 14:44   ` Fiona Ebner
2025-05-09 11:20     ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 14/15] test: ha tester: add test cases in more complex scenarios Daniel Kral
2025-04-29  8:54   ` Fiona Ebner
2025-04-29  9:01   ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 15/15] test: add test cases for rules config Daniel Kral
2025-03-25 16:47 ` [pve-devel] [RFC cluster/ha-manager 00/16] HA colocation rules Daniel Kral
2025-04-24 10:12   ` Fiona Ebner
2025-04-01  1:50 ` DERUMIER, Alexandre
2025-04-01  9:39   ` Daniel Kral
2025-04-01 11:05     ` DERUMIER, Alexandre via pve-devel
2025-04-03 12:26     ` Fabian Grünbichler
2025-04-24 10:12     ` Fiona Ebner
2025-04-24 10:12 ` Fiona Ebner
2025-04-25  8:36   ` Daniel Kral
2025-04-25 12:25     ` Fiona Ebner
2025-04-25 13:25       ` Daniel Kral
2025-04-25 13:58         ` Fiona Ebner

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=d00a08d7-25a2-453e-8958-f2fbff120a4c@proxmox.com \
    --to=f.ebner@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal