From: Daniel Kral <d.kral@proxmox.com>
To: "Fiona Ebner" <f.ebner@proxmox.com>,
"Proxmox VE development discussion" <pve-devel@lists.proxmox.com>,
"Fabian Grünbichler" <f.gruenbichler@proxmox.com>
Subject: Re: [pve-devel] [PATCH ha-manager 05/15] rules: add colocation rule plugin
Date: Wed, 7 May 2025 10:41:19 +0200 [thread overview]
Message-ID: <b1c1f704-9d6f-46ad-be6e-2c57d2fa929c@proxmox.com> (raw)
In-Reply-To: <a7528f74-2b8f-4961-940d-05574b2c046e@proxmox.com>
On 4/29/25 11:15, Fiona Ebner wrote:
> Am 29.04.25 um 10:37 schrieb Daniel Kral:
>> On 4/25/25 16:06, Fiona Ebner wrote:
>>> Am 11.04.25 um 13:04 schrieb Daniel Kral:
>>>> On 4/3/25 14:16, Fabian Grünbichler wrote:
>>>>> On March 25, 2025 4:12 pm, Daniel Kral wrote:
>>>> Also, I was curious about how that would work out for the case where a
>>>> negative colocation rule was defined for three nodes with those rules
>>>> split into three rules (essentially a cycle dependence). This should in
>>>> theory have the same semantics as the above rule set:
>>>>
>>>> colocation: stick-together1
>>>> services vm:101,vm:104
>>>> affinity together
>>>> strict 1
>>>>
>>>> colocation: stick-together2
>>>> services vm:104,vm:102
>>>> affinity together
>>>> strict 1
>>>>
>>>> colocation: very-lonely-services1
>>>> services vm:101,vm:102
>>>> affinity separate
>>>> strict 1
>>>>
>>>> colocation: very-lonely-services2
>>>> services vm:102,vm:103
>>>> affinity separate
>>>> strict 1
>>>>
>>>> colocation: very-lonely-services3
>>>> services vm:101,vm:103
>>>> affinity separate
>>>> strict 1
>>>>
>>>> Without the merge of positive rules, 'check_inner_consistency' would
>>>> again not detect the inconsistency here. But with the merge correctly
>>>> applied before checking the consistency, this would be resolved and the
>>>> effective rule set would be:
>>>
>>> I suppose the effective rule set would still also contain the two
>>> 'together' rules, or?
>>
>> No, here it would not. I found it would be most fair or reasonable that
>> if a positive and a negative colocation rule contradict each other to
>> drop both of them. Here the conflicts are
>>
>> stick-together1 -- very-lonely-services1
>> stick-together2 -- very-lonely-services1
>>
>> so all three of them will be dropped from the rule set.
>>
>> Seeing this again here, such cases definitely benefit from the immediate
>> response with the 'conflict'/'ineffective' state to show users that
>> those won't be applied instead of only logging it.
>
> I don't think dropping all conflicting rules is best. Say you have a
> rule between 100 services and that conflicts with a rule with just 2
> services. Dropping the latter only is much preferred then IMHO. In
> general, I'd argue that the more rules we can still honor, the better
> from a user perspective. I don't think it's worth going out of our way
> though and introduce much complexity to minimize it, because conflicts
> are usually prevented while configuring already.
Yes, that would be a worst-case scenario there and if users run into it
often enough dropping the rules should definitely optimize for reducing
the amount of rules that are dropped.
I'll keep in mind but that would be more of a follow-up enhancement as
you already pointed out.
>
>>>> colocation: very-lonely-services2
>>>> services vm:102,vm:103
>>>> affinity separate
>>>> strict 1
>>>>
>>>> colocation: very-lonely-services3
>>>> services vm:101,vm:103
>>>> affinity separate
>>>> strict 1
>>>>
>>>> It could be argued, that the negative colocation rules should be merged
>>>> in a similar manner here, as there's now a "effective" difference in the
>>>> semantics of the above rule sets, as the negative colocation rule
>>>> between vm 101 and vm 103 and vm 102 and vm 103 remains.
>>>>
>>>> What do you think?
>>>
>>> I don't think there's a particular need to also merge negative rules
>>> between services (when they form a complete graph). It won't make a
>>> difference if there are no conflicts with positive rules and in edge
>>> cases when there are conflicts (which usually gets caught while editing
>>> the rules), it's better to drop fewer rules, so not merging is an
>>> advantage. Or do you have a particular advantage in favor of merging in
>>> mind?
>>
>> Yes, I think so too.
>>
>> There's quite the semantic difference between positive and negative
>> colocation rules here. "Connected" positive colocation relationships
>> (strict ones in particular) must be co-located in the end anyway, so it
>> makes sense to merge them. Negative colocation relationships must be
>> defined in a "circular" way and might just happen by coincidence for
>> small scenarios.
>>
>> But one thing that just struck me is that what if the user intentionally
>> wrote them as separate rules? Then it might be confusing that all rules
>> are dropped and not just the minimal amount that contradict other
>> rules... Then check_inner_consistency() would just drop the minimal
>> amount of rules that need to be dropped as in the above example.
>>
>> It would be a softer interpretation of the rules indeed, but it might
>> benefit the user in the end and make things easier to follow from the
>> user perspective. If there's no opposition to that, I'd tend to drop the
>> merging for any rules after all.
>
> Having conflicts is already a bit of an edge case, so I don't think we
> need to go out of our way to avoid merging of positive rules. But if it
> doesn't increase the complexity much, it's fine either way IMHO.
I also agree that the conflicts are more of an edge case anyway. Not
merging could increase the run time a little bit per rule, since we
iterate over them for every call of get_colocation_preference(...) now,
but there's still caching / optimization potential in that regard...
I think we already discussed this off-list but if there's an argument
that the current data structures are becoming a bottleneck then we could
improve this by not iterating over all rules themselves but already
compiling the constraints for each service statically and then only
filtering out what isn't relevant now (e.g. because the node is offline,
a colocated service is offline/not yet assigned, etc.).
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-05-07 8:41 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-25 15:12 [pve-devel] [RFC cluster/ha-manager 00/16] HA colocation rules Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH cluster 1/1] cfs: add 'ha/rules.cfg' to observed files Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 01/15] ignore output of fence config tests in tree Daniel Kral
2025-03-25 17:49 ` [pve-devel] applied: " Thomas Lamprecht
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 02/15] tools: add hash set helper subroutines Daniel Kral
2025-03-25 17:53 ` Thomas Lamprecht
2025-04-03 12:16 ` Fabian Grünbichler
2025-04-11 11:24 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 03/15] usage: add get_service_node and pin_service_node methods Daniel Kral
2025-04-24 12:29 ` Fiona Ebner
2025-04-25 7:39 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 04/15] add rules section config base plugin Daniel Kral
2025-04-24 13:03 ` Fiona Ebner
2025-04-25 8:29 ` Daniel Kral
2025-04-25 9:12 ` Fiona Ebner
2025-04-25 13:30 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 05/15] rules: add colocation rule plugin Daniel Kral
2025-04-03 12:16 ` Fabian Grünbichler
2025-04-11 11:04 ` Daniel Kral
2025-04-25 14:06 ` Fiona Ebner
2025-04-29 8:37 ` Daniel Kral
2025-04-29 9:15 ` Fiona Ebner
2025-05-07 8:41 ` Daniel Kral [this message]
2025-04-25 14:05 ` Fiona Ebner
2025-04-29 8:44 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 06/15] config, env, hw: add rules read and parse methods Daniel Kral
2025-04-25 14:11 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 07/15] manager: read and update rules config Daniel Kral
2025-04-25 14:30 ` Fiona Ebner
2025-04-29 8:04 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 08/15] manager: factor out prioritized nodes in select_service_node Daniel Kral
2025-04-28 13:03 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 09/15] manager: apply colocation rules when selecting service nodes Daniel Kral
2025-04-03 12:17 ` Fabian Grünbichler
2025-04-11 15:56 ` Daniel Kral
2025-04-28 12:46 ` Fiona Ebner
2025-04-29 9:07 ` Daniel Kral
2025-04-29 9:22 ` Fiona Ebner
2025-04-28 12:26 ` Fiona Ebner
2025-04-28 14:33 ` Fiona Ebner
2025-04-29 9:39 ` Daniel Kral
2025-04-29 9:50 ` Daniel Kral
2025-04-30 11:09 ` Daniel Kral
2025-05-02 9:33 ` Fiona Ebner
2025-05-07 8:31 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 10/15] sim: resources: add option to limit start and migrate tries to node Daniel Kral
2025-04-28 13:20 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 11/15] test: ha tester: add test cases for strict negative colocation rules Daniel Kral
2025-04-28 13:44 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 12/15] test: ha tester: add test cases for strict positive " Daniel Kral
2025-04-28 13:51 ` Fiona Ebner
2025-05-09 11:22 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 13/15] test: ha tester: add test cases for loose " Daniel Kral
2025-04-28 14:44 ` Fiona Ebner
2025-05-09 11:20 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 14/15] test: ha tester: add test cases in more complex scenarios Daniel Kral
2025-04-29 8:54 ` Fiona Ebner
2025-04-29 9:01 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 15/15] test: add test cases for rules config Daniel Kral
2025-03-25 16:47 ` [pve-devel] [RFC cluster/ha-manager 00/16] HA colocation rules Daniel Kral
2025-04-24 10:12 ` Fiona Ebner
2025-04-01 1:50 ` DERUMIER, Alexandre
2025-04-01 9:39 ` Daniel Kral
2025-04-01 11:05 ` DERUMIER, Alexandre via pve-devel
2025-04-03 12:26 ` Fabian Grünbichler
2025-04-24 10:12 ` Fiona Ebner
2025-04-24 10:12 ` Fiona Ebner
2025-04-25 8:36 ` Daniel Kral
2025-04-25 12:25 ` Fiona Ebner
2025-04-25 13:25 ` Daniel Kral
2025-04-25 13:58 ` Fiona Ebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b1c1f704-9d6f-46ad-be6e-2c57d2fa929c@proxmox.com \
--to=d.kral@proxmox.com \
--cc=f.ebner@proxmox.com \
--cc=f.gruenbichler@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal