factor out the default group generation and the priority group generation. Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com> ---
changes since v3: * new in this version src/PVE/HA/Manager.pm | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 6f6fdab..439a750 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -70,8 +70,8 @@ sub flush_master_status { $haenv->write_manager_status($ms); } -sub select_service_node { - my ($groups, $online_node_usage, $service_conf, $current_node, $try_next, $tried_nodes) = @_; +sub get_service_group { + my ($groups, $online_node_usage, $service_conf) = @_; my $group = {}; # add all online nodes to default group to allow try_next when no group set @@ -83,6 +83,13 @@ sub select_service_node { $group = $groups->{ids}->{$service_conf->{group}} if $service_conf->{group} && $groups->{ids}->{$service_conf->{group}}; + return $group; +} + +# groups available nodes with their priority as group index +sub get_node_priority_groups { + my ($group, $online_node_usage) = @_; + my $pri_groups = {}; my $group_members = {}; foreach my $entry (keys %{$group->{nodes}}) { @@ -95,7 +102,6 @@ sub select_service_node { $group_members->{$node} = $pri; } - # add non-group members to unrestricted groups (priority -1) if (!$group->{restricted}) { my $pri = -1; @@ -106,6 +112,16 @@ sub select_service_node { } } + return ($pri_groups, $group_members); +} + +sub select_service_node { + my ($groups, $online_node_usage, $service_conf, $current_node, $try_next, $tried_nodes) = @_; + + my $group = get_service_group($groups, $online_node_usage, $service_conf); + + my ($pri_groups, $group_members) = get_node_priority_groups($group, $online_node_usage); + my @pri_list = sort {$b <=> $a} keys %$pri_groups; return undef if !scalar(@pri_list); -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel