On 4/28/25 16:33, Fiona Ebner wrote:
Am 28.04.25 um 14:26 schrieb Fiona Ebner:
Am 25.03.25 um 16:12 schrieb Daniel Kral:
+
+           delete $allowed_nodes->{$node};
+       }
+    } elsif (scalar keys %$possible_nodes) {
+       # limit to the possible nodes the service should be on, if there are 
any.
+       for my $node (keys %$allowed_nodes) {
+           next if exists($possible_nodes->{$node});
+
+           delete $allowed_nodes->{$node};

This seems wrong. Non-strict rules should not limit the allowed nodes.
See below for more on this.

Ah, if there are no possible nodes at all, then the allowed nodes are
not modified at all. This is what makes the loose tests work. This
"secret" here really needs to be properly documented ;)

Yes definitely, I'm working on making the logic clearer here.

I think another improvement we could make here is along with "merging" get_colocated_services(...) and get_colocation_preference(...), they could already structure together in a strict and non-strict part, so the apply_*_colocation_rules(...) helpers don't have to handle that anymore and just could focus on applying them in the end.

If we go for that route, we could reduce apply_positive_colocation_rules(...) to something like this:

sub apply_positive_colocation_rules {
    my ($together, $allowed_nodes) = @_;

    my $possible_nodes = { $together->{strict}->%* };

    # Consider loose nodes if there are no strict nodes
$possible_nodes = PVE::HA::Tools::set_intersect($allowed_nodes, $together->{loose})
        if !%$possible_nodes;

# If there are no strict nodes or the loose nodes would result in an empty $allowed_nodes, apply nothing
    return if !%$possible_nodes;

    for my $node (keys %$allowed_nodes) {
        next if exists($possible_nodes->{$node});

        delete $allowed_nodes->{$node};
    }
}


It still would be nice to think about which kind of interaction with
scoring we want exactly. Currently it's the number 1 I mentioned, i.e.
"prefer loose colocation over scoring no matter what". Can be fine to
start out too, just means we'd need to introduce an option/tunable if we
ever want to change it.

I'll see if I find a good indicator that is understandable for users and results in something deterministic from our side to be testable.

But AFAICS the current config interface would need an extra tunable anyway to express some kind of factor which controls how much the loose colocation rule anyway, so I think that would fit better in a follow-up series - especially if users request it :).


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

Reply via email to