[pve-devel] [PATCH qemu-server 3/3] clone: use new config_lock_shared
Fabian Grünbichler
f.gruenbichler at proxmox.com
Mon Apr 27 10:24:28 CEST 2020
and move the lock call and decision logic closer together
Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
Notes:
needs libpve-guest-common-perl with new lock_config_shared
possibly better to postpone since it does not fix an actual issue
but just improves the readability
PVE/API2/Qemu.pm | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index f6a98f0..9de8f9f 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -2856,9 +2856,6 @@ __PACKAGE__->register_method({
my $running = PVE::QemuServer::check_running($vmid) || 0;
- # exclusive lock if VM is running - else shared lock is enough;
- my $shared_lock = $running ? 0 : 1;
-
my $clonefn = sub {
# do all tests after lock but before forking worker - if possible
@@ -3046,11 +3043,17 @@ __PACKAGE__->register_method({
return $rpcenv->fork_worker('qmclone', $vmid, $authuser, $realcmd);
};
- return PVE::QemuConfig->lock_config_mode($vmid, 1, $shared_lock, sub {
- # Aquire exclusive lock lock for $newid
+ # Aquire exclusive lock lock for $newid
+ my $lock_target_vm = sub {
return PVE::QemuConfig->lock_config_full($newid, 1, $clonefn);
- });
+ };
+ # exclusive lock if VM is running - else shared lock is enough;
+ if ($running) {
+ return PVE::QemuConfig->lock_config_full($vmid, 1, $lock_target_vm);
+ } else {
+ return PVE::QemuConfig->lock_config_shared($vmid, 1, $lock_target_vm);
+ }
}});
__PACKAGE__->register_method({
--
2.20.1
More information about the pve-devel
mailing list