From: Dominik Csapak <d.csapak@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH qemu-server v5 09/11] api: include not mapped resources for running vms in migrate preconditions
Date: Mon, 20 Jan 2025 15:51:54 +0100 [thread overview]
Message-ID: <20250120145203.282363-13-d.csapak@proxmox.com> (raw)
In-Reply-To: <20250120145203.282363-1-d.csapak@proxmox.com>
so that we can show a proper warning in the migrate dialog and check it
in the bulk migrate precondition check
the unavailable_storages and should be the same as before, but
we now always return (not_)allowed_nodes too.
to make the code a bit easier to read, reorganize how we construct
the (not_)allowed_nodes properties.
also add a note that we want to redesign the return values here, to make
* the api call simpler
* return better structured values
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
PVE/API2/Qemu.pm | 45 ++++++++++++++++++++++++++-------------------
1 file changed, 26 insertions(+), 19 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 047d8da0..915d788d 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -4594,6 +4594,8 @@ __PACKAGE__->register_method({
},
},
returns => {
+ # TODO 9.x: rework the api call to return more sensible structures
+ # e.g. a simple list of nodes with their blockers and/or notices to show
type => "object",
properties => {
running => {
@@ -4607,7 +4609,7 @@ __PACKAGE__->register_method({
description => "An allowed node",
},
optional => 1,
- description => "List nodes allowed for offline migration, only passed if VM is offline"
+ description => "List nodes allowed for migration.",
},
not_allowed_nodes => {
type => 'object',
@@ -4623,7 +4625,7 @@ __PACKAGE__->register_method({
},
},
},
- description => "List not allowed nodes with additional information, only passed if VM is offline"
+ description => "List not allowed nodes with additional information.",
},
local_disks => {
type => 'array',
@@ -4701,7 +4703,6 @@ __PACKAGE__->register_method({
my ($local_resources, $mapped_resources, $missing_mappings_by_node) =
PVE::QemuServer::check_local_resources($vmconf, $res->{running}, 1);
- delete $missing_mappings_by_node->{$localnode};
my $vga = PVE::QemuServer::parse_vga($vmconf->{vga});
if ($res->{running} && $vga->{'clipboard'} && $vga->{'clipboard'} eq 'vnc') {
@@ -4710,28 +4711,34 @@ __PACKAGE__->register_method({
# if vm is not running, return target nodes where local storage/mapped devices are available
# for offline migration
- if (!$res->{running}) {
- $res->{allowed_nodes} = [];
- my $checked_nodes = PVE::QemuServer::check_local_storage_availability($vmconf, $storecfg);
- delete $checked_nodes->{$localnode};
-
- foreach my $node (keys %$checked_nodes) {
- my $missing_mappings = $missing_mappings_by_node->{$node};
- if (scalar($missing_mappings->@*)) {
- $checked_nodes->{$node}->{'unavailable-resources'} = $missing_mappings;
- next;
- }
+ $res->{allowed_nodes} = [];
+ $res->{not_allowed_nodes} = {};
- if (!defined($checked_nodes->{$node}->{unavailable_storages})) {
- push @{$res->{allowed_nodes}}, $node;
- }
+ my $storage_nodehash = PVE::QemuServer::check_local_storage_availability($vmconf, $storecfg);
+
+ my $nodelist = PVE::Cluster::get_nodelist();
+ for my $node ($nodelist->@*) {
+ next if $node eq $localnode;
+
+ # extract missing storage info
+ if (my $storage_info = $storage_nodehash->{$node}) {
+ $res->{not_allowed_nodes}->{$node} = $storage_info;
+ }
+
+ # extract missing mappings info
+ my $missing_mappings = $missing_mappings_by_node->{$node};
+ if (scalar($missing_mappings->@*)) {
+ $res->{not_allowed_nodes}->{$node}->{'unavailable-resources'} = $missing_mappings;
+ }
+ # if nothing came up, add it to the allowed nodes
+ if (!$res->{not_allowed_nodes}->{$node}) {
+ push $res->{allowed_nodes}->@*, $node;
}
- $res->{not_allowed_nodes} = $checked_nodes;
}
my $local_disks = &$check_vm_disks_local($storecfg, $vmconf, $vmid);
- $res->{local_disks} = [ values %$local_disks ];;
+ $res->{local_disks} = [ values %$local_disks ];
$res->{local_resources} = $local_resources;
$res->{'mapped-resources'} = [ sort keys $mapped_resources->%* ];
--
2.39.5
_______________________________________________
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-01-20 14:53 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-20 14:51 [pve-devel] [PATCH guest-common/qemu-server/manager/docs v5 0/3] implement experimental vgpu live migration Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH guest-common v5 1/3] mapping: pci: check the mdev configuration on the device too Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH guest-common v5 2/3] mapping: pci: add 'live-migration-capable' flag to mappings Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH guest-common v5 3/3] mapping: remove find_on_current_node Dominik Csapak
2025-01-22 8:16 ` Dominik Csapak
2025-01-22 15:10 ` Thomas Lamprecht
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 01/11] usb: mapping: move implementation of find_on_current_node here Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 02/11] pci: " Dominik Csapak
2025-02-11 12:45 ` Christoph Heiss
2025-02-13 9:30 ` Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 03/11] pci: mapping: check mdev config against hardware Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 04/11] vm stop-cleanup: allow callers to decide error behavior Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 05/11] migrate: call vm_stop_cleanup after stopping in phase3_cleanup Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 06/11] pci: set 'enable-migration' to on for live-migration marked mapped devices Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 07/11] check_local_resources: add more info per mapped device and return as hash Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 08/11] api: enable live migration for marked mapped pci devices Dominik Csapak
2025-01-20 14:51 ` Dominik Csapak [this message]
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 10/11] tests: cfg2cmd: fix mdev tests Dominik Csapak
2025-01-22 15:10 ` Thomas Lamprecht
2025-01-20 14:51 ` [pve-devel] [PATCH qemu-server v5 11/11] migration: show vfio state transferred too Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH manager v5 1/5] mapping: pci: include mdev in config checks Dominik Csapak
2025-01-20 14:51 ` [pve-devel] [PATCH manager v5 2/5] bulk migrate: improve precondition checks Dominik Csapak
2025-02-11 12:50 ` Christoph Heiss
2025-01-20 14:51 ` [pve-devel] [PATCH manager v5 3/5] bulk migrate: include checks for live-migratable local resources Dominik Csapak
2025-01-20 14:52 ` [pve-devel] [PATCH manager v5 4/5] ui: adapt migration window to precondition api change Dominik Csapak
2025-01-20 14:52 ` [pve-devel] [PATCH manager v5 5/5] fix #5175: ui: allow configuring and live migration of mapped pci resources Dominik Csapak
2025-01-20 14:52 ` [pve-devel] [PATCH docs v5 1/2] qm: resource mapping: add description for `mdev` option Dominik Csapak
2025-01-20 14:52 ` [pve-devel] [PATCH docs v5 2/2] qm: resource mapping: document `live-migration-capable` setting Dominik Csapak
2025-02-11 12:57 ` [pve-devel] [PATCH guest-common/qemu-server/manager/docs v5 0/3] implement experimental vgpu live migration Christoph Heiss
2025-03-05 10:34 ` Eneko Lacunza via pve-devel
2025-03-06 11:06 ` Dominik Csapak
2025-03-06 14:42 ` Eneko Lacunza via pve-devel
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=20250120145203.282363-13-d.csapak@proxmox.com \
--to=d.csapak@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.