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 E61CE689E2 for ; Fri, 10 Sep 2021 09:48:30 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id DBB1A10959 for ; Fri, 10 Sep 2021 09:48:30 +0200 (CEST) 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 685A51094E for ; Fri, 10 Sep 2021 09:48:30 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 3CB314469B for ; Fri, 10 Sep 2021 09:48:30 +0200 (CEST) From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= To: pve-devel@lists.proxmox.com Date: Fri, 10 Sep 2021 09:48:20 +0200 Message-Id: <20210910074820.1477562-2-f.gruenbichler@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210910074820.1477562-1-f.gruenbichler@proxmox.com> References: <20210910074820.1477562-1-f.gruenbichler@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.412 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. [qemu.pm] Subject: [pve-devel] [PATCH qemu-server 2/2] api: template: invert lock and fork 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: Fri, 10 Sep 2021 07:48:30 -0000 like for other API calls, repeat the cheap checks done for early abort before forking and without locks after forking and obtaining the lock, and only hold the flock in the forked worker instead of across the fork. Signed-off-by: Fabian Grünbichler --- not sure whether we want to switch to the "progress bar -> task viewer" thing in the GUI for this endpoint? it's usually instant, except when the storage is very slow/overloaded/.. PVE/API2/Qemu.pm | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 0a23525..a8fbd9d 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -4353,8 +4353,7 @@ __PACKAGE__->register_method({ my $disk = extract_param($param, 'disk'); - my $updatefn = sub { - + my $load_and_check = sub { my $conf = PVE::QemuConfig->load_config($vmid); PVE::QemuConfig->check_lock($conf); @@ -4368,17 +4367,23 @@ __PACKAGE__->register_method({ die "you can't convert a VM to template if VM is running\n" if PVE::QemuServer::check_running($vmid); - my $realcmd = sub { - PVE::QemuServer::template_create($vmid, $conf, $disk); - }; + return $conf; + }; - $conf->{template} = 1; - PVE::QemuConfig->write_config($vmid, $conf); + $load_and_check->(); - return $rpcenv->fork_worker('qmtemplate', $vmid, $authuser, $realcmd); + my $realcmd = sub { + PVE::QemuConfig->lock_config($vmid, sub { + my $conf = $load_and_check->(); + + $conf->{template} = 1; + PVE::QemuConfig->write_config($vmid, $conf); + + PVE::QemuServer::template_create($vmid, $conf, $disk); + }); }; - return PVE::QemuConfig->lock_config($vmid, $updatefn); + return $rpcenv->fork_worker('qmtemplate', $vmid, $authuser, $realcmd); }}); __PACKAGE__->register_method({ -- 2.30.2