[pve-devel] [PATCH ha-manager v2 15/26] manager: handle migrations for colocated services

Daniel Kral d.kral at proxmox.com
Fri Jun 27 11:10:12 CEST 2025


On 6/20/25 16:31, Daniel Kral wrote:
> +=head3 get_colocated_services($rules, $sid)
> +
> +Returns a list of two hash sets, where the first hash set contains the
> +positively colocated services for C<$sid>, while the second hash set contains
> +the negatively colocated services for C<$sid> according to the colocation rules
> +in C<$rules>.
> +
> +For example, if a service is in a negative colocation with C<'vm:101'> and in a
> +positive colocation with C<'ct:200'> and C<'ct:201'>, the returned value will be:
> +
> +    {
> +        together => {
> +            'vm:101' => 1
> +        },
> +        separate => {
> +            'ct:200' => 1,
> +            'ct:201' => 1
> +        }
> +    }
> +
> +=cut
> +

I'd tend to introduce another colocation rules canonicalize helper in v3 
to also make any negatively colocated services of the positively 
colocated services of a service $sid also negatively colocated with that 
service $sid. This could also be done in get_colocated_services(...) and 
get_colocation_preference(...) individually, but introducing these 
inferred extra rules ends up in less code.

An example could help here to understand the above better:

Services A, B, and C must be kept together
Services A and Z must be kept separate

Therefore, services B and Z must be kept separate and services C and Z 
must be kept separate too.

I hope this is still intuitive enough for users (came across it while 
implementing showing the comigrated services / blocking services in the 
web interface) and must prevent invalid migrations as a migration of 
service B would currently allow "comigrating" service A (!) and C to the 
node of service Z.




More information about the pve-devel mailing list