useful for re-balanacing on start, where we do not want to exclude
the current node like setting the $try_next param does, but also
don't want to favor it like not setting the $try_next param does.
We might want to transform both, `try_next` and `best_scored` into a
single `mode` parameter to reduce complexity and make it more
explicit what we want here.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
}
sub select_service_node {
}
sub select_service_node {
- my ($groups, $online_node_usage, $sid, $service_conf, $current_node, $try_next, $tried_nodes, $maintenance_fallback) = @_;
+ my ($groups, $online_node_usage, $sid, $service_conf, $current_node, $try_next, $tried_nodes, $maintenance_fallback, $best_scored) = @_;
my $group = get_service_group($groups, $online_node_usage, $service_conf);
my $group = get_service_group($groups, $online_node_usage, $service_conf);
return undef if !scalar(@pri_list);
# stay on current node if possible (avoids random migrations)
return undef if !scalar(@pri_list);
# stay on current node if possible (avoids random migrations)
- if (!$try_next && $group->{nofailback} && defined($group_members->{$current_node})) {
+ if ((!$try_next && !$best_scored) && $group->{nofailback} && defined($group_members->{$current_node})) {
return $maintenance_fallback
if defined($maintenance_fallback) && $pri_groups->{$top_pri}->{$maintenance_fallback};
return $maintenance_fallback
if defined($maintenance_fallback) && $pri_groups->{$top_pri}->{$maintenance_fallback};
- return $current_node if !$try_next && $pri_groups->{$top_pri}->{$current_node};
+ return $current_node if (!$try_next && !$best_scored) && $pri_groups->{$top_pri}->{$current_node};
my $scores = $online_node_usage->score_nodes_to_start_service($sid, $current_node);
my @nodes = sort {
my $scores = $online_node_usage->score_nodes_to_start_service($sid, $current_node);
my @nodes = sort {
- if (defined($found) && ($found < (scalar(@nodes) - 1))) {
+ if (!$best_scored && defined($found) && ($found < (scalar(@nodes) - 1))) {
return $nodes[$found + 1];
} else {
return $nodes[0];
return $nodes[$found + 1];
} else {
return $nodes[0];