all lists on 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>,
	Daniel Kral <d.kral@proxmox.com>
Subject: Re: [pve-devel] [PATCH ha-manager 03/15] usage: add get_service_node and pin_service_node methods
Date: Thu, 24 Apr 2025 14:29:49 +0200	[thread overview]
Message-ID: <d6d55f44-70a1-4da8-b19c-a88667126e14@proxmox.com> (raw)
In-Reply-To: <20250325151254.193177-5-d.kral@proxmox.com>

Am 25.03.25 um 16:12 schrieb Daniel Kral:
> Add methods get_service_node() and pin_service_node() to the Usage class
> to retrieve and pin the current node of a specific service.

Hmm, not sure about calling it "pin", why not "set"?

> 
> This is used to retrieve the current node of a service for colocation
> rules inside of select_service_node(), where there is currently no
> access to the global services state.
> 
> Signed-off-by: Daniel Kral <d.kral@proxmox.com>
> ---
> For me this is more of a temporary change, since I don't think putting
> this information here is very useful in the future. It was more of a
> workaround for the moment, since `select_service_node()` doesn't have
> access to the global service configuration data, which is needed here.
> 
> I would like to give `select_service_node()` the information from e.g.
> $sc directly post-RFC.

Yes, this sounds cleaner than essentially tracking the same things twice
in different places. Can't we do this as preparation to avoid such
temporary workarounds?

>  src/PVE/HA/Usage.pm        | 12 ++++++++++++
>  src/PVE/HA/Usage/Basic.pm  | 15 +++++++++++++++
>  src/PVE/HA/Usage/Static.pm | 14 ++++++++++++++
>  3 files changed, 41 insertions(+)
> 
> diff --git a/src/PVE/HA/Usage.pm b/src/PVE/HA/Usage.pm
> index 66d9572..e4f86d7 100644
> --- a/src/PVE/HA/Usage.pm
> +++ b/src/PVE/HA/Usage.pm
> @@ -27,6 +27,18 @@ sub list_nodes {
>      die "implement in subclass";
>  }
>  
> +sub get_service_node {
> +    my ($self, $sid) = @_;
> +
> +    die "implement in subclass";
> +}
> +
> +sub pin_service_node {
> +    my ($self, $sid, $node) = @_;
> +
> +    die "implement in subclass";
> +}
> +
>  sub contains_node {
>      my ($self, $nodename) = @_;
>  
> diff --git a/src/PVE/HA/Usage/Basic.pm b/src/PVE/HA/Usage/Basic.pm
> index d6b3d6c..50d687b 100644
> --- a/src/PVE/HA/Usage/Basic.pm
> +++ b/src/PVE/HA/Usage/Basic.pm
> @@ -10,6 +10,7 @@ sub new {
>  
>      return bless {
>  	nodes => {},
> +	services => {},

I feel like it would be more natural to also use 'service-nodes' here
like you do for the 'static' plugin [continued below...]

>  	haenv => $haenv,
>      }, $class;
>  }
> @@ -38,11 +39,25 @@ sub contains_node {
>      return defined($self->{nodes}->{$nodename});
>  }
>  
> +sub get_service_node {
> +    my ($self, $sid) = @_;
> +
> +    return $self->{services}->{$sid};

...because these kinds of expressions don't make it clear that this is a
node.

> +}
> +
> +sub pin_service_node {
> +    my ($self, $sid, $node) = @_;
> +
> +    $self->{services}->{$sid} = $node;
> +}
> +
>  sub add_service_usage_to_node {
>      my ($self, $nodename, $sid, $service_node, $migration_target) = @_;
>  
>      if ($self->contains_node($nodename)) {
> +	$self->{total}++;
>  	$self->{nodes}->{$nodename}++;
> +	$self->{services}->{$sid} = $nodename;
>      } else {
>  	$self->{haenv}->log(
>  	    'warning',
> diff --git a/src/PVE/HA/Usage/Static.pm b/src/PVE/HA/Usage/Static.pm
> index 3d0af3a..8db9202 100644
> --- a/src/PVE/HA/Usage/Static.pm
> +++ b/src/PVE/HA/Usage/Static.pm
> @@ -22,6 +22,7 @@ sub new {
>  	'service-stats' => {},
>  	haenv => $haenv,
>  	scheduler => $scheduler,
> +	'service-nodes' => {},
>  	'service-counts' => {}, # Service count on each node. Fallback if scoring calculation fails.
>      }, $class;
>  }
> @@ -85,9 +86,22 @@ my sub get_service_usage {
>      return $service_stats;
>  }
>  
> +sub get_service_node {
> +    my ($self, $sid) = @_;
> +
> +    return $self->{'service-nodes'}->{$sid};
> +}
> +
> +sub pin_service_node {
> +    my ($self, $sid, $node) = @_;
> +
> +    $self->{'service-nodes'}->{$sid} = $node;
> +}
> +
>  sub add_service_usage_to_node {
>      my ($self, $nodename, $sid, $service_node, $migration_target) = @_;
>  
> +    $self->{'service-nodes'}->{$sid} = $nodename;

This is why "pin" feels wrong to me. It will just get overwritten here
next time a usage calculation is made. Can that be problematic?

>      $self->{'service-counts'}->{$nodename}++;
>  
>      eval {



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


  reply	other threads:[~2025-04-24 12:29 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 [this message]
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
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=d6d55f44-70a1-4da8-b19c-a88667126e14@proxmox.com \
    --to=f.ebner@proxmox.com \
    --cc=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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal