]> git.proxmox.com Git - pve-container.git/commitdiff
Refactor lock_container into lock_config_[xx]
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 12 Feb 2016 06:53:28 +0000 (07:53 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 12 Feb 2016 07:18:04 +0000 (08:18 +0100)
This mimics the "signatures" of the methods in
QemuServer.pm, and should allow us to use this methods in a
future abstract "Guest" class.

It also changes the various timeouts (ranging from 1, 10, 60
to undef) to use the default timeout defined in the
lock_config methods (10).

Also drop the now unused use statement for flock.

src/PVE/API2/LXC.pm
src/PVE/API2/LXC/Config.pm
src/PVE/API2/LXC/Snapshot.pm
src/PVE/API2/LXC/Status.pm
src/PVE/CLI/pct.pm
src/PVE/LXC.pm
src/PVE/LXC/Migrate.pm
src/PVE/VZDump/LXC.pm

index 7db8488cd5b12e3c31bfecaf38968039e3b8001f..32151c8ab4d5cbef5c8d61aabae850f1feb04c9d 100644 (file)
@@ -325,7 +325,7 @@ __PACKAGE__->register_method({
            PVE::AccessControl::add_vm_to_pool($vmid, $pool) if $pool;
        };
 
-       my $realcmd = sub { PVE::LXC::lock_container($vmid, 1, $code); };
+       my $realcmd = sub { PVE::LXC::lock_config($vmid, $code); };
 
        &$check_vmid_usage(); # first check before locking
 
@@ -528,7 +528,7 @@ __PACKAGE__->register_method({
            PVE::Firewall::remove_vmfw_conf($vmid);
        };
 
-       my $realcmd = sub { PVE::LXC::lock_container($vmid, 1, $code); };
+       my $realcmd = sub { PVE::LXC::lock_config($vmid, $code); };
        
        return $rpcenv->fork_worker('vzdestroy', $vmid, $authuser, $realcmd);
     }});
@@ -947,7 +947,7 @@ __PACKAGE__->register_method({
            return $rpcenv->fork_worker('vztemplate', $vmid, $authuser, $realcmd);
        };
 
-       PVE::LXC::lock_container($vmid, undef, $updatefn);
+       PVE::LXC::lock_config($vmid, $updatefn);
 
        return undef;
     }});
@@ -1186,7 +1186,7 @@ __PACKAGE__->register_method({
 
        };
 
-       return PVE::LXC::lock_container($vmid, undef, $clonefn);
+       return PVE::LXC::lock_config($vmid, $clonefn);
     }});
 
 
@@ -1334,7 +1334,7 @@ __PACKAGE__->register_method({
            return $rpcenv->fork_worker('resize', $vmid, $authuser, $realcmd);
        };
 
-       return PVE::LXC::lock_container($vmid, undef, $code);;
+       return PVE::LXC::lock_config($vmid, $code);;
     }});
 
 1;
index 1a1190c6f6a292f31d01a0254cadf0538cc7a0f5..8e9295b0b8bcac15e361c771d09a7af76199aeb3 100644 (file)
@@ -143,7 +143,7 @@ __PACKAGE__->register_method({
            PVE::LXC::update_lxc_config($storage_cfg, $vmid, $conf);
        };
 
-       PVE::LXC::lock_container($vmid, undef, $code);
+       PVE::LXC::lock_config($vmid, $code);
 
        return undef;
     }});
index 36bbbf7d8120d419f0f1ef7b182cfa075bfec775..49fd4f56e70ad98984a7ffb20e70b57bcb39b3dd 100644 (file)
@@ -311,7 +311,7 @@ __PACKAGE__->register_method({
            PVE::LXC::write_config($vmid, $conf, 1);
        };
 
-       PVE::LXC::lock_container($vmid, 10, $updatefn);
+       PVE::LXC::lock_config($vmid, $updatefn);
 
        return undef;
     }});
index cd7f04d7d8919c6d2e6eddb60ebc3ed8d2b1dcdf..e91ac7c9eefacebe1e78fa6d51ed0851b2b5da4b 100644 (file)
@@ -186,7 +186,7 @@ __PACKAGE__->register_method({
                return $rpcenv->fork_worker('vzstart', $vmid, $authuser, $realcmd);
            };
 
-           return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+           return PVE::LXC::lock_config($vmid, $lockcmd);
        }
     }});
 
@@ -268,7 +268,7 @@ __PACKAGE__->register_method({
                return $rpcenv->fork_worker('vzstop', $vmid, $authuser, $realcmd);
            };
 
-           return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+           return PVE::LXC::lock_config($vmid, $lockcmd);
        }
     }});
 
@@ -361,7 +361,7 @@ __PACKAGE__->register_method({
            return $rpcenv->fork_worker('vzshutdown', $vmid, $authuser, $realcmd);
        };
 
-       return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+       return PVE::LXC::lock_config($vmid, $lockcmd);
     }});
 
 __PACKAGE__->register_method({
@@ -417,7 +417,7 @@ __PACKAGE__->register_method({
            return $rpcenv->fork_worker('vzsuspend', $vmid, $authuser, $realcmd);
        };
 
-       return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+       return PVE::LXC::lock_config($vmid, $lockcmd);
     }});
 
 __PACKAGE__->register_method({
index e7a2292e448bfd2568be9ec0d3b2c47ef957b104..b2bc361149762362ae8cb8d73c0fbb1d84d64f83 100755 (executable)
@@ -44,7 +44,7 @@ __PACKAGE__->register_method ({
 
        my $vmid = $param->{vmid};
 
-       PVE::LXC::lock_container($vmid, 5, sub {
+       PVE::LXC::lock_config($vmid, sub {
            my $conf = PVE::LXC::load_config($vmid);
            delete $conf->{lock};
            PVE::LXC::write_config($vmid, $conf);
@@ -199,7 +199,7 @@ __PACKAGE__->register_method ({
            PVE::Tools::run_command($command);
        };
 
-       PVE::LXC::lock_container($vmid, undef, $do_fsck);
+       PVE::LXC::lock_config($vmid, $do_fsck);
        return undef;
     }});
 
index 1ef8a08469f211d2fa042ff7f852d05cfb14a253..e701202e1929c073ec447cf1341edd6492c58d5e 100644 (file)
@@ -9,7 +9,7 @@ use Socket;
 use File::Path;
 use File::Spec;
 use Cwd qw();
-use Fcntl qw(O_RDONLY :flock);
+use Fcntl qw(O_RDONLY);
 
 use PVE::Cluster qw(cfs_register_file cfs_read_file);
 use PVE::Storage;
@@ -646,28 +646,46 @@ sub write_config {
 my $lock_handles =  {};
 my $lockdir = "/run/lock/lxc";
 
-sub lock_filename {
+sub config_file_lock {
     my ($vmid) = @_;
 
     return "$lockdir/pve-config-${vmid}.lock";
 }
 
-sub lock_container {
+sub lock_config_full {
     my ($vmid, $timeout, $code, @param) = @_;
 
-    $timeout = 10 if !$timeout;
+    my $filename = config_file_lock($vmid);
 
-    my $filename = lock_filename($vmid);
+    mkdir $lockdir if !-d $lockdir;
+
+    my $res = lock_file($filename, $timeout, $code, @param);
+
+    die $@ if $@;
+
+    return $res;
+}
+
+sub lock_config_mode {
+    my ($vmid, $timeout, $shared, $code, @param) = @_;
+
+    my $filename = config_file_lock($vmid);
 
     mkdir $lockdir if !-d $lockdir;
 
-    my $res = PVE::Tools::lock_file_full($filename, $timeout, 0, $code, @param);
+    my $res = lock_file_full($filename, $timeout, $shared, $code, @param);
 
     die $@ if $@;
 
     return $res;
 }
 
+sub lock_config {
+    my ($vmid, $code, @param) = @_;
+
+    return lock_config_full($vmid, 10, $code, @param);
+}
+
 sub option_exists {
     my ($name) = @_;
 
@@ -1732,7 +1750,7 @@ my $snapshot_prepare = sub {
        write_config($vmid, $conf);
     };
 
-    lock_container($vmid, 10, $updatefn);
+    lock_config($vmid, $updatefn);
 
     return $snap;
 };
@@ -1761,7 +1779,7 @@ my $snapshot_commit = sub {
        write_config($vmid, $conf);
     };
 
-    lock_container($vmid, 10 ,$updatefn);
+    lock_config($vmid ,$updatefn);
 };
 
 sub has_feature {
@@ -1927,7 +1945,7 @@ sub snapshot_delete {
        write_config($vmid, $conf);
     };
 
-    lock_container($vmid, 10, $updatefn);
+    lock_config($vmid, $updatefn);
 
     my $storecfg = PVE::Storage::config();
 
@@ -1976,7 +1994,7 @@ sub snapshot_delete {
     my $err = $@;
 
     if(!$err || ($err && $force)) {
-       lock_container($vmid, 10, $del_snap);
+       lock_config($vmid, $del_snap);
        if ($err) {
            die "Can't delete snapshot: $vmid $snapname $err\n";
        }
@@ -2035,11 +2053,11 @@ sub snapshot_rollback {
        write_config($vmid, $conf);
     };
 
-    lock_container($vmid, 10, $updatefn);
+    lock_config($vmid, $updatefn);
 
     PVE::Storage::volume_snapshot_rollback($storecfg, $volid, $snapname);
 
-    lock_container($vmid, 5, $unlockfn);
+    lock_config($vmid, $unlockfn);
 }
 
 sub template_create {
index 58e4ea22ba4eb79b9775a0ef3f14a828ce021b9d..94d53a23f9e0d72d5794186eed6f2cfac5bd1b1e 100644 (file)
@@ -16,7 +16,7 @@ use base qw(PVE::AbstractMigrate);
 sub lock_vm {
     my ($self, $vmid, $code, @param) = @_;
 
-    return PVE::LXC::lock_container($vmid, undef, $code, @param);
+    return PVE::LXC::lock_config($vmid, $code, @param);
 }
 
 sub prepare {
index 57dcbe253610ed5f254cc68ad56db52c9eb94134..0979f15db2b3967d264a45e5e45b847e659a45fd 100644 (file)
@@ -185,7 +185,7 @@ sub lock_vm {
        PVE::LXC::write_config($vmid, $conf);
     };
 
-    PVE::LXC::lock_container($vmid, 10, $lockconfig, ($self, $vmid));
+    PVE::LXC::lock_config($vmid, $lockconfig, ($self, $vmid));
 }
 
 sub unlock_vm {
@@ -202,7 +202,7 @@ sub unlock_vm {
        }
     };
 
-    PVE::LXC::lock_container($vmid, 60, $unlockconfig, ($self, $vmid));
+    PVE::LXC::lock_config($vmid, $unlockconfig, ($self, $vmid));
 }
 
 sub snapshot {