Since the static service stats are already processed by their individual plugin's implementation of get_static_stats_from_config(...), the static service stats repository can be used by the static load scheduler directly.
Signed-off-by: Daniel Kral <[email protected]> --- src/PVE/HA/Env.pm | 8 +------ src/PVE/HA/Env/PVE2.pm | 42 +++++++++++------------------------ src/PVE/HA/Manager.pm | 1 - src/PVE/HA/Resources.pm | 6 ----- src/PVE/HA/Resources/PVECT.pm | 6 ----- src/PVE/HA/Resources/PVEVM.pm | 6 ----- src/PVE/HA/Sim/Env.pm | 8 +------ src/PVE/HA/Sim/Hardware.pm | 13 +---------- src/PVE/HA/Sim/Resources.pm | 8 ------- src/PVE/HA/Usage/Static.pm | 23 +++++-------------- 10 files changed, 22 insertions(+), 99 deletions(-) diff --git a/src/PVE/HA/Env.pm b/src/PVE/HA/Env.pm index 64cf3ea5..6843cb30 100644 --- a/src/PVE/HA/Env.pm +++ b/src/PVE/HA/Env.pm @@ -301,15 +301,9 @@ sub get_datacenter_settings { } sub get_static_service_stats { - my ($self, $id) = @_; - - return $self->{plug}->get_static_service_stats($id); -} - -sub update_static_service_stats { my ($self) = @_; - return $self->{plug}->update_static_service_stats(); + return $self->{plug}->get_static_service_stats(); } sub get_static_node_stats { diff --git a/src/PVE/HA/Env/PVE2.pm b/src/PVE/HA/Env/PVE2.pm index 1a9dc4ea..87b1435a 100644 --- a/src/PVE/HA/Env/PVE2.pm +++ b/src/PVE/HA/Env/PVE2.pm @@ -49,8 +49,6 @@ sub new { $self->{nodename} = $nodename; - $self->{static_service_stats} = undef; - return $self; } @@ -505,40 +503,26 @@ sub get_datacenter_settings { } sub get_static_service_stats { - my ($self, $id) = @_; - - # undef if update_static_service_stats(...) failed before - return undef if !defined($self->{static_service_stats}); - - return $self->{static_service_stats}->{$id}; -} - -sub update_static_service_stats { my ($self) = @_; my $properties = ['cores', 'cpulimit', 'memory', 'sockets', 'vcpus']; - my $service_stats = eval { - my $stats = {}; - my $confs = PVE::Cluster::get_guest_config_properties($properties); + my $stats = {}; + my $confs = PVE::Cluster::get_guest_config_properties($properties); - my $vmlist = PVE::Cluster::get_vmlist(); - my $idlist = $vmlist->{ids} // {}; - for my $id (keys %$idlist) { - my $type = eval { PVE::HA::Tools::get_ha_resource_type($idlist->{$id}->{type}) }; - next if $@; # silently ignore unknown pve types + my $vmlist = PVE::Cluster::get_vmlist(); + my $idlist = $vmlist->{ids} // {}; + for my $id (keys %$idlist) { + my $type = eval { PVE::HA::Tools::get_ha_resource_type($idlist->{$id}->{type}) }; + next if $@; # silently ignore unknown pve types - my $sid = "$type:$id"; - my $conf = $confs->{$id} // {}; - my $plugin = PVE::HA::Resources->lookup($type); + my $sid = "$type:$id"; + my $conf = $confs->{$id} // {}; + my $plugin = PVE::HA::Resources->lookup($type); - $stats->{$sid} = $plugin->get_static_stats_from_config($conf); - } + $stats->{$sid} = $plugin->get_static_stats_from_config($conf); + } - return $stats; - }; - $self->log('warning', "unable to update static service stats cache - $@") if $@; - - $self->{static_service_stats} = $service_stats; + return $stats; } sub get_static_node_stats { diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 2e31296f..57fd0017 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -253,7 +253,6 @@ sub recompute_online_node_usage { $online_node_usage = eval { my $scheduler = PVE::HA::Usage::Static->new($haenv); $scheduler->add_node($_) for $online_nodes->@*; - $haenv->update_static_service_stats(); return $scheduler; }; } else { diff --git a/src/PVE/HA/Resources.pm b/src/PVE/HA/Resources.pm index ea7655e5..aa26d019 100644 --- a/src/PVE/HA/Resources.pm +++ b/src/PVE/HA/Resources.pm @@ -182,12 +182,6 @@ sub get_static_stats_from_config { die "implement in subclass"; } -sub get_static_stats { - my ($class, $haenv, $sid) = @_; - - die "implement in subclass"; -} - # package PVE::HA::Resources::IPAddr; # use strict; diff --git a/src/PVE/HA/Resources/PVECT.pm b/src/PVE/HA/Resources/PVECT.pm index bda33717..79bb7c83 100644 --- a/src/PVE/HA/Resources/PVECT.pm +++ b/src/PVE/HA/Resources/PVECT.pm @@ -168,10 +168,4 @@ sub get_static_stats_from_config { }; } -sub get_static_stats { - my ($class, $haenv, $sid) = @_; - - return $haenv->get_static_service_stats($sid); -} - 1; diff --git a/src/PVE/HA/Resources/PVEVM.pm b/src/PVE/HA/Resources/PVEVM.pm index 786c5130..5a0ac348 100644 --- a/src/PVE/HA/Resources/PVEVM.pm +++ b/src/PVE/HA/Resources/PVEVM.pm @@ -189,10 +189,4 @@ sub get_static_stats_from_config { }; } -sub get_static_stats { - my ($class, $haenv, $sid) = @_; - - return $haenv->get_static_service_stats($sid); -} - 1; diff --git a/src/PVE/HA/Sim/Env.pm b/src/PVE/HA/Sim/Env.pm index 32b5224c..0e3b02e5 100644 --- a/src/PVE/HA/Sim/Env.pm +++ b/src/PVE/HA/Sim/Env.pm @@ -489,15 +489,9 @@ sub get_datacenter_settings { } sub get_static_service_stats { - my ($self, $id) = @_; - - return $self->{hardware}->get_static_service_stats($id); -} - -sub update_static_service_stats { my ($self) = @_; - return $self->{hardware}->update_static_service_stats(); + return $self->{hardware}->get_static_service_stats(); } sub get_static_node_stats { diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm index 702500c2..a7e28c8a 100644 --- a/src/PVE/HA/Sim/Hardware.pm +++ b/src/PVE/HA/Sim/Hardware.pm @@ -525,8 +525,6 @@ sub new { $self->{service_config} = $self->read_service_config(); - $self->{static_service_stats} = undef; - return $self; } @@ -1063,22 +1061,13 @@ sub watchdog_update { } sub get_static_service_stats { - my ($self, $id) = @_; - - # undef if update_static_service_stats(...) failed before - return undef if !defined($self->{static_service_stats}); - - return $self->{static_service_stats}->{$id}; -} - -sub update_static_service_stats { my ($self) = @_; my $filename = "$self->{statusdir}/static_service_stats"; my $stats = eval { PVE::HA::Tools::read_json_from_file($filename) }; $self->log('warning', "unable to update static service stats cache - $@") if $@; - $self->{static_service_stats} = $stats; + return $stats; } sub get_static_node_stats { diff --git a/src/PVE/HA/Sim/Resources.pm b/src/PVE/HA/Sim/Resources.pm index f91d3ea2..09a042b6 100644 --- a/src/PVE/HA/Sim/Resources.pm +++ b/src/PVE/HA/Sim/Resources.pm @@ -137,12 +137,4 @@ sub remove_locks { return undef; } -sub get_static_stats { - my ($class, $haenv, $sid) = @_; - - my $hardware = $haenv->hardware(); - - return $hardware->get_static_service_stats($sid); -} - 1; diff --git a/src/PVE/HA/Usage/Static.pm b/src/PVE/HA/Usage/Static.pm index acc3533c..48622d62 100644 --- a/src/PVE/HA/Usage/Static.pm +++ b/src/PVE/HA/Usage/Static.pm @@ -14,12 +14,15 @@ sub new { my $node_stats = eval { $haenv->get_static_node_stats() }; die "did not get static node usage information - $@" if $@; + my $service_stats = eval { $haenv->get_static_service_stats() }; + die "did not get static service usage information - $@" if $@; + my $scheduler = eval { PVE::RS::ResourceScheduling::Static->new(); }; die "unable to initialize static scheduling - $@" if $@; return bless { 'node-stats' => $node_stats, - 'service-stats' => {}, + 'service-stats' => $service_stats, haenv => $haenv, scheduler => $scheduler, 'node-services' => {}, # Services on each node. Fallback if scoring calculation fails. @@ -63,20 +66,8 @@ sub contains_node { my sub get_service_usage { my ($self, $sid) = @_; - return $self->{'service-stats'}->{$sid} if $self->{'service-stats'}->{$sid}; - - my (undef, $type, undef) = $self->{haenv}->parse_sid($sid); - my $plugin = PVE::HA::Resources->lookup($type); - - my $stats = eval { $plugin->get_static_stats($self->{haenv}, $sid) }; - die "did not get static service usage information for '$sid'\n" if !$stats; - - my $service_stats = { - maxcpu => $stats->{maxcpu} + 0.0, # containers allow non-integer cpulimit - maxmem => int($stats->{maxmem}), - }; - - $self->{'service-stats'}->{$sid} = $service_stats; + my $service_stats = $self->{'service-stats'}->{$sid} + or die "did not get static service usage information for '$sid'\n"; return $service_stats; } @@ -101,8 +92,6 @@ sub remove_service_usage { 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 { -- 2.47.3
