[pve-devel] [PATCH ha-manager 7/9] usage: allow granular changes to Usage implementations
Fiona Ebner
f.ebner at proxmox.com
Fri Oct 17 13:57:09 CEST 2025
Am 30.09.25 um 4:20 PM schrieb Daniel Kral:
> This makes use of the new signature for add_service_usage_to_node(...)
> from the Proxmox::RS::ResourceScheduling::Static package, which allows
> tracking of which HA resources have been assigned to which nodes.
>
> Signed-off-by: Daniel Kral <d.kral at proxmox.com>
Reviewed-by: Fiona Ebner <f.ebner at proxmox.com>
with some style nits below:
(also good to have a note: dependency bump for pve-rs needed)
> @@ -51,10 +51,18 @@ sub add_service_usage_to_node {
> }
> }
>
> +sub remove_service_usage {
> + my ($self, $sid) = @_;
> +
> + for my $node ($self->list_nodes()) {
> + delete $self->{nodes}->{$node}->{$sid};
> + }
> +}
> +
> sub score_nodes_to_start_service {
> my ($self, $sid, $service_node) = @_;
>
> - return $self->{nodes};
> + return { map { $_ => scalar keys $self->{nodes}->{$_}->%* } keys $self->{nodes}->%* };
Style nit: I feel like 'scalar' is more readable when surrounding its
argument with parentheses.
Style nit: Maybe add
my $nodes = $self->{nodes};
up front to defuse the lengthy expression a bit?
> @@ -89,16 +89,27 @@ my sub get_service_usage {
> sub add_service_usage_to_node {
> my ($self, $nodename, $sid, $service_node, $migration_target) = @_;
>
> - $self->{'service-counts'}->{$nodename}++;
> + $self->{'node-services'}->{$nodename}->{$sid} = 1;
>
> eval {
> my $service_usage = get_service_usage($self, $sid, $service_node, $migration_target);
> - $self->{scheduler}->add_service_usage_to_node($nodename, $service_usage);
> + $self->{scheduler}->add_service_usage_to_node($nodename, $sid, $service_usage);
> };
> $self->{haenv}->log('warning', "unable to add service '$sid' usage to node '$nodename' - $@")
> if $@;
> }
>
> +sub remove_service_usage {
> + my ($self, $sid) = @_;
> +
> + delete $self->{'node-services'}->{$_}->{$sid} for $self->list_nodes();
Style nit: add parentheses for the delete(), since other code follows it
(and the argument is quite lengthy too):
https://pve.proxmox.com/wiki/Perl_Style_Guide#Perl_syntax_choices
> +
> + eval { $self->{scheduler}->remove_service_usage($sid) };
> + $self->{haenv}->log('warning', "unable to remove service '$sid' usage - $@") if $@;
> +
> + delete $self->{'service-stats'}->{$sid}; # Invalidate old service stats
> +}
> +
> sub score_nodes_to_start_service {
> my ($self, $sid, $service_node) = @_;
>
> @@ -111,7 +122,10 @@ sub score_nodes_to_start_service {
> 'err',
> "unable to score nodes according to static usage for service '$sid' - $err",
> );
> - return $self->{'service-counts'};
> + return {
> + map { $_ => scalar keys $self->{'node-services'}->{$_}->%* }
Style nit: same as above regarding parentheses and using a variable to
improve the readability
> + keys $self->{'node-services'}->%*
> + };
> }
>
> # Take minus the value, so that a lower score is better, which our caller(s) expect(s).
More information about the pve-devel
mailing list