From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 989AE608E6 for ; Thu, 13 Jan 2022 12:04:11 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 930C21D134 for ; Thu, 13 Jan 2022 12:04:11 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 52DC81D104 for ; Thu, 13 Jan 2022 12:04:10 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 2570F46B27 for ; Thu, 13 Jan 2022 12:04:10 +0100 (CET) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Thu, 13 Jan 2022 12:04:01 +0100 Message-Id: <20220113110405.67232-3-f.ebner@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220113110405.67232-1-f.ebner@proxmox.com> References: <20220113110405.67232-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.137 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment 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. [abstractconfig.pm] Subject: [pve-devel] [PATCH v2 guest-common 2/2] config: activate affected storages for snapshot operations 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: , X-List-Received-Date: Thu, 13 Jan 2022 11:04:11 -0000 For snapshot creation, the storage for the vmstate file is activated via vdisk_alloc when the state file is created. Do not activate the volumes themselves, as that has unnecessary side effects (e.g. waiting for zvol device link for ZFS, mapping the volume for RBD). If a storage can only do snapshot operations on a volume that has been activated, it needs to activate the volume itself. The actual implementation will be in the plugins to be able to skip CD ROM drives and bind-mounts, etc. Signed-off-by: Fabian Ebner --- src/PVE/AbstractConfig.pm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/PVE/AbstractConfig.pm b/src/PVE/AbstractConfig.pm index 0c40062..2d15388 100644 --- a/src/PVE/AbstractConfig.pm +++ b/src/PVE/AbstractConfig.pm @@ -786,6 +786,13 @@ sub __snapshot_commit { $class->lock_config($vmid, $updatefn); } +# Activates the storages affected by the snapshot operations. +sub __snapshot_activate_storages { + my ($class, $conf, $include_vmstate) = @_; + + return; # FIXME PVE 8.x change to die 'implement me' and bump Breaks for older plugins +} + # Creates a snapshot for the VM/CT. sub snapshot_create { my ($class, $vmid, $snapname, $save_vmstate, $comment) = @_; @@ -801,6 +808,8 @@ sub snapshot_create { my $drivehash = {}; eval { + $class->__snapshot_activate_storages($conf, 0); + if ($freezefs) { $class->__snapshot_freeze($vmid, 0); } @@ -884,6 +893,8 @@ sub snapshot_delete { die "snapshot '$snapname' does not exist\n" if !defined($snap); + $class->__snapshot_activate_storages($snap, 1) if !$drivehash; + $snapshot_delete_assert_not_needed_by_replication->($class, $vmid, $conf, $snap, $snapname) if !$drivehash && !$force; @@ -1085,6 +1096,8 @@ sub snapshot_rollback { $snap = $get_snapshot_config->($conf); if ($prepare) { + $class->__snapshot_activate_storages($snap, 1); + $rollback_remove_replication_snapshots->($class, $vmid, $snap, $snapname); $class->foreach_volume($snap, sub { -- 2.30.2