From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
	by lore.proxmox.com (Postfix) with ESMTPS id 7E2761FF185
	for <inbox@lore.proxmox.com>; Mon,  9 Jun 2025 09:32:13 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id E1F263751B;
	Mon,  9 Jun 2025 09:32:30 +0200 (CEST)
To: pve-devel@lists.proxmox.com
Date: Mon,  9 Jun 2025 10:32:10 +0300
In-Reply-To: <20250609073214.7880-1-denis.kanchev@storpool.com>
References: <20250609073214.7880-1-denis.kanchev@storpool.com>
MIME-Version: 1.0
Message-ID: <mailman.300.1749454349.395.pve-devel@lists.proxmox.com>
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Post: <mailto:pve-devel@lists.proxmox.com>
From: Demayl via pve-devel <pve-devel@lists.proxmox.com>
Precedence: list
Cc: Demayl <denis.kanchev@storpool.com>
X-Mailman-Version: 2.1.29
X-BeenThere: pve-devel@lists.proxmox.com
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
Subject: [pve-devel] [PATCH atomic_snapshot 2/4] snapshot api: add type
 option when making snapshots
Content-Type: multipart/mixed; boundary="===============2179557652822231916=="
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

--===============2179557652822231916==
Content-Type: message/rfc822
Content-Disposition: inline

Return-Path: <denis.kanchev@storpool.com>
X-Original-To: pve-devel@lists.proxmox.com
Delivered-To: pve-devel@lists.proxmox.com
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 6ABE2CCD83
	for <pve-devel@lists.proxmox.com>; Mon,  9 Jun 2025 09:32:27 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 5168C3744B
	for <pve-devel@lists.proxmox.com>; Mon,  9 Jun 2025 09:32:27 +0200 (CEST)
Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c])
	(using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
	(No client certificate requested)
	by firstgate.proxmox.com (Proxmox) with ESMTPS
	for <pve-devel@lists.proxmox.com>; Mon,  9 Jun 2025 09:32:26 +0200 (CEST)
Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-450cb2ddd46so25020065e9.2
        for <pve-devel@lists.proxmox.com>; Mon, 09 Jun 2025 00:32:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=storpool.com; s=google; t=1749454340; x=1750059140; darn=lists.proxmox.com;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to;
        bh=DHWxLE9ohA/CTc/k1IUgSYXLzTvJNmZtn7CpFQQeLd8=;
        b=IQPZND5I0o5YWE5pprJSCXLikG6Bggp7u7WTfQw1YNr40zVnczSUz24B/rjbxy2Fnm
         NznO9RJinRLiwrb01G5HrhgbrwMS1QiLwG+x0LtL4sx5xgfvdt7Ug65cCYZUYH0u1ewj
         bhtrgQcb2Q7Ru/YU9vkvGAOZh4LuRjE/mErh0wpPaa+TXi1bx8S9mfyt4OvyX5lqfYnr
         R0z7IhZQCW6UVNIJIxdrt+Kw1GoFzqQ8n7KDRiIwyoqvmjBfCcQWAgJZCcSuRnKFQDuh
         xjwmSvE9B3/P/Wrsh7ldCQEeuII1aymve8liD404ojT7E+cd9kkZNwZ/mpZ1jjxqIr10
         YCzQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1749454340; x=1750059140;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
         :subject:date:message-id:reply-to;
        bh=DHWxLE9ohA/CTc/k1IUgSYXLzTvJNmZtn7CpFQQeLd8=;
        b=j0obak/lIOz55cTVZOItipjrrAUQS41lwL3iIyUw32VgdPzVM9oJgxVuRg5teIjZqE
         /n8y7/2fyhQX5/yVwEqX3r4+F2U8jcqZ0QyFgCAeoBhvmIS+h0bGQy4aRvvBuLfoXyeL
         zQ0kZe1/6jiY7kyWvaE7XeVDr3CKj0vqjprfLNTw704hVdbw8DsKMf9wTelIKJvYtKh0
         67u6YP85qpLL82Qcmx1WWpnDrLzWal9JxKveq8fQDQ1Oa+nMUkrk6hnAidGHF1C9Qh1q
         XDzyJAndmj/sXvsIGSxg7TVynsL0hx7Gj/4DKiOeqdvdLAYDTP+JdLeooj2YuPkJRZxz
         bIrg==
X-Gm-Message-State: AOJu0YyPc3ui2ju26rk5yxyHVUoayH7H/kY6OThMFFwU0zPyumF30EFq
	KiMGjnIKK8iT8M5/lS0+EpxyQdSqtCzKNR623JqlT/tE/cjnla6aFuP27DNQpzG+2MgXT/nhdWA
	OJljJMRI=
X-Gm-Gg: ASbGncvtUm5xkizgBQW1yK0ffJvWq1ks/6z/fwpSbj+tcXfnHG6+aDDCL67w7S+Cj5Q
	jqQ3bpx21/ql5SZxHjpvUhtgDoKFkej9b8prFYnAcwbBfGrsTC5QM9IjGU//bn5zaD2plsJQ7kH
	VarGB7/JjnkJzd+ll5LZe9SVLbjQFRgjishK54a+P8qf3q+NwCkN8oWCG/H7kfdOMnUhHHG3a4C
	oEcxeTFMrqxREJxhIEdqAQCkUlGFFV8jh5QDVf/ngdETVg4OA6Goxe3QSYWTLNCLq2N2BQZzqfo
	2zjHvjKB5HOjkeVzx1/1Ryn9nMJV4LHXDKT/Eyb75wTbF8O5azQYXPhlfqR5zKKpiXIsPEwvGu2
	t7GLs3Ewz+XswohIejDcl
X-Google-Smtp-Source: AGHT+IHY4V+AOt5/pmB1/WtQMEYJq0FUC3f/O4kWyW9O2CDR9NIEN/m6Vr3Bunv31a7ALoGBkwpRAA==
X-Received: by 2002:a05:600c:1e8c:b0:450:d386:1afb with SMTP id 5b1f17b1804b1-45201350cc7mr117704915e9.9.1749454340359;
        Mon, 09 Jun 2025 00:32:20 -0700 (PDT)
Received: from dennis.. (79-100-232-190.ip.btc-net.bg. [79.100.232.190])
        by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4521370961csm102916165e9.22.2025.06.09.00.32.18
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Mon, 09 Jun 2025 00:32:19 -0700 (PDT)
From: Demayl <denis.kanchev@storpool.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH atomic_snapshot 2/4] snapshot api: add type option when making snapshots
Date: Mon,  9 Jun 2025 10:32:10 +0300
Message-ID: <20250609073214.7880-3-denis.kanchev@storpool.com>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250609073214.7880-1-denis.kanchev@storpool.com>
References: <20250609073214.7880-1-denis.kanchev@storpool.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SPAM-LEVEL: Spam detection results:  0
	AWL                     0.000 Adjusted score from AWL reputation of From: address
	BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
	DKIM_SIGNED               0.1 Message has a DKIM or DK signature, not necessarily valid
	DKIM_VALID               -0.1 Message has at least one valid DKIM or DK signature
	DKIM_VALID_AU            -0.1 Message has a valid DKIM or DK signature from author's domain
	DKIM_VALID_EF            -0.1 Message has a valid DKIM or DK signature from envelope-from domain
	DMARC_PASS               -0.1 DMARC pass policy
	RCVD_IN_DNSWL_NONE     -0.0001 Sender listed at https://www.dnswl.org/, no trust
	SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
	SPF_PASS               -0.001 SPF: sender matches SPF record

Allows picking between atomic and sequential snapshots

Default sequential

Signed-off-by: Demayl <denis.kanchev@storpool.com>
---
 PVE/API2/Qemu.pm  |  7 ++++++-
 PVE/QemuConfig.pm | 13 +++++++++++++
 PVE/QemuServer.pm | 10 ++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 626cce45..27d86438 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -5488,6 +5488,11 @@ __PACKAGE__->register_method({
 		type => 'string',
 		description => "A textual description or comment.",
 	    },
+	    type => {
+		optional => 1,
+		type => 'string',
+		description => "Sequential or atomic snapshot of VM volumes (if supported by storage)",
+	    },
 	},
     },
     returns => {
@@ -5519,7 +5524,7 @@ __PACKAGE__->register_method({
 	my $realcmd = sub {
 	    PVE::Cluster::log_msg('info', $authuser, "snapshot VM $vmid: $snapname");
 	    PVE::QemuConfig->snapshot_create($vmid, $snapname, $param->{vmstate},
-					     $param->{description});
+					     $param->{description}, $param->{type});
 	};
 
 	return $rpcenv->fork_worker('qmsnapshot', $vmid, $authuser, $realcmd);
diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
index 2609542c..7f6399c7 100644
--- a/PVE/QemuConfig.pm
+++ b/PVE/QemuConfig.pm
@@ -367,6 +367,19 @@ sub __snapshot_create_vol_snapshots_hook {
     }
 }
 
+sub get_atomic_snapshot_volumes {
+    my ($class, $conf) = @_;
+
+    my $volumes = $class->SUPER::get_atomic_snapshot_volumes($conf);
+    my $filtered = {};
+    for my $vol_name (keys %{$volumes}) {
+	if (! PVE::QemuServer::drive_is_cdrom($volumes->{$vol_name})) {
+		$filtered->{$vol_name} = $volumes->{$vol_name};
+	}
+    }
+    return $filtered;
+}
+
 sub __snapshot_create_vol_snapshot {
     my ($class, $vmid, $ds, $drive, $snapname) = @_;
 
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 577959a4..5c14ce49 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -2809,6 +2809,10 @@ our $vmstatus_return_properties = {
 	type => 'boolean',
 	optional => 1,
     },
+    snapshots => {
+	description => "Snapshot info.",
+	type => 'object',
+    },
 };
 
 my $last_proc_pid_stat;
@@ -2881,6 +2885,12 @@ sub vmstatus {
 	$d->{tags} = $conf->{tags} if defined($conf->{tags});
 
 	$res->{$vmid} = $d;
+
+	my ($can_atomic, $pref_atomic, undef) = PVE::QemuConfig->check_atomic_snapshots($conf);
+	$res->{$vmid}->{snapshots} = {
+	    atomic_possible => $can_atomic,
+	    atomic_preferred => $pref_atomic,
+	};
     }
 
     my $netdev = PVE::ProcFSTools::read_proc_net_dev();
-- 
2.43.0



--===============2179557652822231916==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

--===============2179557652822231916==--