From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id EE7291FF16B for ; Fri, 24 Oct 2025 14:27:27 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7263020066; Fri, 24 Oct 2025 14:27:50 +0200 (CEST) From: Friedrich Weber To: pve-devel@lists.proxmox.com Date: Fri, 24 Oct 2025 14:25:53 +0200 Message-ID: <20251024122705.93761-2-f.weber@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251024122705.93761-1-f.weber@proxmox.com> References: <20251024122705.93761-1-f.weber@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1761308827027 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.012 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [storage.pm, plugin.pm] Subject: [pve-devel] [PATCH pve-storage 1/2] plugin: map/activate volume: allow callers to pass hints X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Right now, the only supported hint is guest-ostype, via which qemu-server provides the guest's OS type from the VM configuration. Signed-off-by: Friedrich Weber --- src/PVE/Storage.pm | 34 ++++++++++++++++++++++++++++++---- src/PVE/Storage/Plugin.pm | 17 +++++++++++++++-- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm index 1dde2b7..709d9ca 100755 --- a/src/PVE/Storage.pm +++ b/src/PVE/Storage.pm @@ -771,6 +771,7 @@ sub abs_filesystem_path { my $path; if (parse_volume_id($volid, 1)) { + # TODO: in order to pass $hints, abs_filesystem_path needs to accept it too activate_volumes($cfg, [$volid]); $path = PVE::Storage::path($cfg, $volid); } else { @@ -905,6 +906,7 @@ my $volume_export_prepare = sub { volume_snapshot($cfg, $volid, $snapshot) if $migration_snapshot; + # TODO: in order to pass $hints, $volume_export_prepare would need to accept it too if (defined($snapshot)) { activate_volumes($cfg, [$volid], $snapshot); } else { @@ -1122,7 +1124,9 @@ sub vdisk_create_base { } sub map_volume { - my ($cfg, $volid, $snapname) = @_; + my ($cfg, $volid, $snapname, $hints) = @_; + + verify_hints($hints); my ($storeid, $volname) = parse_volume_id($volid); @@ -1130,7 +1134,7 @@ sub map_volume { my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); - return $plugin->map_volume($storeid, $scfg, $volname, $snapname); + return $plugin->map_volume($storeid, $scfg, $volname, $snapname, $hints); } sub unmap_volume { @@ -1385,11 +1389,33 @@ sub deactivate_storage { $plugin->deactivate_storage($storeid, $scfg, $cache); } +sub is_hint_supported { + my ($hint) = @_; + + return defined($PVE::Storage::Plugin::hints_properties->{$hint}); +} + +sub verify_hints { + my ($hints, $noerr) = @_; + + return if !defined($hints); + + eval { PVE::JSONSchema::validate($hints, $PVE::Storage::Plugin::hints_format); }; + my $err = $@; + + return $hints if !$err; + return if $noerr; + + die "hints are not valid: $@"; +} + sub activate_volumes { - my ($cfg, $vollist, $snapname) = @_; + my ($cfg, $vollist, $snapname, $hints) = @_; return if !($vollist && scalar(@$vollist)); + verify_hints($hints); + my $storagehash = {}; foreach my $volid (@$vollist) { my ($storeid, undef) = parse_volume_id($volid); @@ -1404,7 +1430,7 @@ sub activate_volumes { my ($storeid, $volname) = parse_volume_id($volid); my $scfg = storage_config($cfg, $storeid); my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); - $plugin->activate_volume($storeid, $scfg, $volname, $snapname, $cache); + $plugin->activate_volume($storeid, $scfg, $volname, $snapname, $cache, $hints); } } diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm index 8acd214..2c72179 100644 --- a/src/PVE/Storage/Plugin.pm +++ b/src/PVE/Storage/Plugin.pm @@ -59,6 +59,19 @@ cfs_register_file( sub { __PACKAGE__->write_config(@_); }, ); +our $hints_properties = { + 'guest-ostype' => { + type => 'string', + optional => 1, + }, +}; + +our $hints_format = { + type => 'object', + additionalProperties => 0, + properties => $hints_properties, +}; + my %prune_option = ( optional => 1, type => 'integer', @@ -1871,7 +1884,7 @@ sub deactivate_storage { } sub map_volume { - my ($class, $storeid, $scfg, $volname, $snapname) = @_; + my ($class, $storeid, $scfg, $volname, $snapname, $hints) = @_; my ($path) = $class->path($scfg, $volname, $storeid, $snapname); return $path; @@ -1884,7 +1897,7 @@ sub unmap_volume { } sub activate_volume { - my ($class, $storeid, $scfg, $volname, $snapname, $cache) = @_; + my ($class, $storeid, $scfg, $volname, $snapname, $cache, $hints) = @_; my $path = $class->filesystem_path($scfg, $volname, $snapname); -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel