all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Fiona Ebner <f.ebner@proxmox.com>
To: "Michael Köppl" <m.koeppl@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH guest-common v7 05/24] add module to track previously used guest IDs
Date: Fri, 9 Oct 2026 18:22:56 +0200	[thread overview]
Message-ID: <b3a5b8d7-b3e2-4a4e-90d8-0ee91cb25e15@proxmox.com> (raw)
In-Reply-To: <20261005144805.825538-6-m.koeppl@proxmox.com>

Am 05.10.26 um 4:50 PM schrieb Michael Köppl:
> +my sub next_unused($ranges, $id) {
> +    my $next = $id;
> +    for my $range ($ranges->@*) {
> +        my ($start, $end) = $range->@*;
> +        next if $end < $next;
> +        last if $next < $start;
> +        $next = $end + 1;
> +    }
> +    return $next;
> +}
> +

---snip 8<---

> +}
> +
> +# Returns the lowest ID at or above $id that is neither taken by an
> +# existing guest nor recorded as used before.
> +sub get_next_unused_id($id) {
> +    my $ranges = cfs_read_file($FILENAME);
> +    my $vmlist = PVE::Cluster::get_vmlist() // {};
> +    my $existing = $vmlist->{ids} // {};
> +
> +    $id = next_unused($ranges, $id);
> +    while (defined($existing->{$id})) {
> +        $id = next_unused($ranges, $id + 1);

This one was found by our LLM auto-review:

"Consider checking the scaling of get_next_unused_id() and retaining a
range cursor: each existing guest whose ID was never recorded causes
next_unused() to restart traversal of the historical ranges. This makes
a request O(historical ranges × consecutive existing guests).

For example, 100,000 isolated recorded IDs below lower=500000 fit below
the file-size cap. If 10,000 pre-tracking guests occupy IDs
500000–509999, a single /cluster/nextid request performs roughly one
billion range iterations, potentially tying up its API worker."

I think we can just pass along $existing and check within the
next_unused() function. Or even inline next_unused() if we switch
assert_id_satisfies_next_id_settings() to use get_next_unused_id(),
maybe with a param to ignore the existing guests, since that is already
done on the call site, i.e. the nextid endpoint. But also wouldn't be
expensive to consider them.




  reply	other threads:[~2026-10-09 16:23 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-05 14:47 [PATCH many v7 00/24] add option to prevent suggesting previously used VMIDs Michael Köppl
2026-10-05 14:47 ` [PATCH cluster v7 01/24] cluster files: add virtual-guest/used-guest-ids Michael Köppl
2026-10-05 14:47 ` [PATCH cluster v7 02/24] datacenter config: add unique subproperty to next-id Michael Köppl
2026-10-05 14:47 ` [PATCH cluster v7 03/24] datacenter config: next-id: add enforce subproperty Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 04/24] src/makefile: order files alphabetically Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 05/24] add module to track previously used guest IDs Michael Köppl
2026-10-09 16:22   ` Fiona Ebner [this message]
2026-10-05 14:47 ` [PATCH guest-common v7 06/24] tests: add tests for used guest ID tracking Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 07/24] abstract config: register used guest ID when creating config Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 08/24] guest id: keep used ID list below the pmxcfs file size limit Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 09/24] tests: add tests for used-guest-ids max file size handling Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 10/24] guest id: optionally enforce the next-id range and uniqueness Michael Köppl
2026-10-05 14:47 ` [PATCH guest-common v7 11/24] guest id: add helper to check guest IDs against next-id enforcement Michael Köppl
2026-10-05 14:47 ` [PATCH qemu-server v7 12/24] api: record VM ID as used on destruction and remote migration Michael Köppl
2026-10-05 14:47 ` [PATCH qemu-server v7 13/24] api, remote migrate: exempt existing VMs from next-id enforcement Michael Köppl
2026-10-05 14:47 ` [PATCH container v7 14/24] api: record CT ID as used on destruction and remote migration Michael Köppl
2026-10-05 14:47 ` [PATCH container v7 15/24] api, migrate: exempt existing CTs from next-id enforcement Michael Köppl
2026-10-05 14:47 ` [PATCH manager v7 16/24] ui: guest ID selector: rename exists flag to rejected Michael Köppl
2026-10-05 14:47 ` [PATCH manager v7 17/24] ui: guest ID selector: show the error returned by nextid Michael Köppl
2026-10-09 16:22   ` Fiona Ebner
2026-10-05 14:47 ` [PATCH manager v7 18/24] fix #4369: api: optionally only suggest unique IDs Michael Köppl
2026-10-05 14:48 ` [PATCH manager v7 19/24] ui: dc options: rename VMID to guest ID Michael Köppl
2026-10-05 14:48 ` [PATCH manager v7 20/24] fix #4369: ui: dc options: add option for unique VM/CT IDs Michael Köppl
2026-10-05 14:48 ` [PATCH manager v7 21/24] api: nextid: reject IDs forbidden by next-id enforcement Michael Köppl
2026-10-05 14:48 ` [PATCH manager v7 22/24] ui: dc options: add option to enforce next free guest ID settings Michael Köppl
2026-10-05 14:48 ` [PATCH docs v7 23/24] pmxcfs: files: add virtual-guest/used-guest-ids Michael Köppl
2026-10-05 14:48 ` [PATCH docs v7 24/24] pvecm: next-id: document unique and enforce options Michael Köppl
2026-10-09 16:22 ` [PATCH many v7 00/24] add option to prevent suggesting previously used VMIDs 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=b3a5b8d7-b3e2-4a4e-90d8-0ee91cb25e15@proxmox.com \
    --to=f.ebner@proxmox.com \
    --cc=m.koeppl@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal