[pve-devel] r5017 - pve-storage/pve2

svn-commits at proxmox.com svn-commits at proxmox.com
Mon Aug 16 14:02:55 CEST 2010


Author: dietmar
Date: 2010-08-16 12:02:55 +0000 (Mon, 16 Aug 2010)
New Revision: 5017

Modified:
   pve-storage/pve2/ChangeLog
   pve-storage/pve2/Storage.pm
   pve-storage/pve2/pvesm
Log:
* Storage.pm: use new INotify class (last commit message was nonsense - sorry)



Modified: pve-storage/pve2/ChangeLog
===================================================================
--- pve-storage/pve2/ChangeLog	2010-08-16 11:49:42 UTC (rev 5016)
+++ pve-storage/pve2/ChangeLog	2010-08-16 12:02:55 UTC (rev 5017)
@@ -1,5 +1,7 @@
 2010-08-16  Proxmox Support Team  <support at proxmox.com>
 
+	* Storage.pm: use new INotify class
+	
 	* Storage.pm (lock_config): renamed to lock_storage_config, use
 	lock_file from PVE::Utils
 

Modified: pve-storage/pve2/Storage.pm
===================================================================
--- pve-storage/pve2/Storage.pm	2010-08-16 11:49:42 UTC (rev 5016)
+++ pve-storage/pve2/Storage.pm	2010-08-16 12:02:55 UTC (rev 5017)
@@ -15,7 +15,7 @@
 use Getopt::Long qw(GetOptionsFromArray);
 use Socket;
 use Digest::SHA1;
-use PVE::Tools qw(run_command lock_file);
+use PVE::Tools qw(run_command lock_file safe_print);
 use PVE::INotify qw(register_file read_file write_file);
 
 my $ISCSIADM = '/usr/bin/iscsiadm';
@@ -37,7 +37,7 @@
 	       \&read_cluster_config);
 
 register_file ('storagecfg', "/etc/pve/storage.cfg", 
-	       \&parse_config, undef, undef,
+	       \&parse_config, \&write_config, undef,
 	       always_call_parser => 1); 
 
 sub read_etc_hostname {
@@ -626,17 +626,6 @@
 
 }
 
-sub load_config {
-
-    my $cfg = {};
-
-    my $fh = IO::File->new ($storageconfig, 'r');
-    $cfg = parse_config ($storageconfig, $fh); # returns defaults if !$fh;
-    $fh->close() if $fh;
-
-    return $cfg;
-}
-
 sub fork_command_pipe {
     my ($cmd) = @_;
     
@@ -845,66 +834,49 @@
 }
 
 sub write_config {
-    my ($cfg) = @_;
+    my ($filename, $fh, $cfg) = @_;
 
-    my $tmpfn = "$storageconfig.tmp$$";
-    my $fh = IO::File->new ($tmpfn, 'w') ||
-	die "unable to write file '$tmpfn' - $!";
-
     my $ids = $cfg->{ids};
 
-    eval {
-	my $maxpri = 0;
-	foreach my $storeid (keys %$ids) {
-	    my $pri = $ids->{$storeid}->{priority}; 
-	    $maxpri = $pri if $pri && $pri > $maxpri;
-	}
-	foreach my $storeid (keys %$ids) {
-	    if (!defined ($ids->{$storeid}->{priority})) {
-		$ids->{$storeid}->{priority} = ++$maxpri;
-	    } 
-	}
+    my $maxpri = 0;
+    foreach my $storeid (keys %$ids) {
+	my $pri = $ids->{$storeid}->{priority}; 
+	$maxpri = $pri if $pri && $pri > $maxpri;
+    }
+    foreach my $storeid (keys %$ids) {
+	if (!defined ($ids->{$storeid}->{priority})) {
+	    $ids->{$storeid}->{priority} = ++$maxpri;
+	} 
+    }
 
-	foreach my $storeid (sort {$ids->{$a}->{priority} <=> $ids->{$b}->{priority}} keys %$ids) {
-	    my $scfg = $ids->{$storeid};
-	    my $type = $scfg->{type};
-	    my $def = $default_config->{$type};
+    foreach my $storeid (sort {$ids->{$a}->{priority} <=> $ids->{$b}->{priority}} keys %$ids) {
+	my $scfg = $ids->{$storeid};
+	my $type = $scfg->{type};
+	my $def = $default_config->{$type};
 
-	    die "unknown storage type '$type'\n" if !$def;
+	die "unknown storage type '$type'\n" if !$def;
 
-	    my $data = "$type: $storeid\n";
+	my $data = "$type: $storeid\n";
 
-	    $data .= "\tdisable\n" if $scfg->{disable};
+	$data .= "\tdisable\n" if $scfg->{disable};
 
-	    my $done_hash = { disable => 1};
-	    foreach my $k (@{$required_config->{$type}}) {
-		$done_hash->{$k} = 1;
-		my $v =  $ids->{$storeid}->{$k};
-		die "storage '$storeid' - missing value for required option '$k'\n"
-		    if !defined ($v);
+	my $done_hash = { disable => 1};
+	foreach my $k (@{$required_config->{$type}}) {
+	    $done_hash->{$k} = 1;
+	    my $v =  $ids->{$storeid}->{$k};
+	    die "storage '$storeid' - missing value for required option '$k'\n"
+		if !defined ($v);
+	    $data .= sprint_config_line ($k, $v);
+	}
+
+	foreach my $k (keys %$def) {
+	    next if defined ($done_hash->{$k});
+	    if (defined (my $v = $ids->{$storeid}->{$k})) {
 		$data .= sprint_config_line ($k, $v);
 	    }
-
-	    foreach my $k (keys %$def) {
-		next if defined ($done_hash->{$k});
-		if (defined (my $v = $ids->{$storeid}->{$k})) {
-		    $data .= sprint_config_line ($k, $v);
-		}
-	    }
-
-	    print $fh "$data\n";
 	}
-    };
 
-    my $err = $@;
-
-    close ($fh);
-
-    if ($err) {
-	unlink $tmpfn;
-	die $err;
-    } else {
-	rename $tmpfn, $storageconfig;
+	safe_print($filename, $fh, $data);
     }
 }
 
@@ -2396,7 +2368,7 @@
     lock_storage_config (
 	sub {
 
-	    my $cfg = load_config();
+	    my $cfg = read_file('storagecfg');
 
 	    if (my $scfg = storage_config ($cfg, $storeid, 1)) {
 		die "storage ID '$storeid' already defined\n";
@@ -2423,7 +2395,7 @@
 	
 	    activate_storage ($cfg, $storeid) if !$opts->{disable};
 
-	    write_config($cfg);
+	    write_file('storagecfg', $cfg);
 	    
 	}, "create storage failed");
 }
@@ -2434,7 +2406,7 @@
     lock_storage_config (
 	sub {
 
-	    my $cfg = load_config();
+	    my $cfg = read_file('storagecfg');
 
 	    __assert_if_modified ($cfg, $digest);
 
@@ -2445,8 +2417,9 @@
 	    foreach my $k (%$opts) {
 		$scfg->{$k} = $opts->{$k};
 	    }
-	
-	    write_config ($cfg);
+
+	    write_file('storagecfg', $cfg);
+
 	}, "update storage failed");
 }
 
@@ -2456,7 +2429,7 @@
     lock_storage_config (
 	sub {
 
-	    my $cfg = load_config();
+	    my $cfg = read_file('storagecfg');
 
 	    __assert_if_modified ($cfg, $digest);
 
@@ -2467,7 +2440,8 @@
 
 	    delete ($cfg->{ids}->{$storeid});
 
-	    write_config ($cfg);
+	    write_file('storagecfg', $cfg);
+
 	}, "delete storage failed");
 }
 
@@ -2477,7 +2451,7 @@
     lock_storage_config (
 	sub {
 
-	    my $cfg = load_config();
+	    my $cfg = read_file('storagecfg');
 
 	    __assert_if_modified ($cfg, $digest);
 
@@ -2487,7 +2461,8 @@
 
 	    activate_storage ($cfg, $storeid);	
 
-	    write_config ($cfg);
+	    write_file('storagecfg', $cfg);
+
 	}, "enable storage failed");
 }
 
@@ -2497,7 +2472,7 @@
     lock_storage_config (
 	sub {
 
-	    my $cfg = load_config();
+	    my $cfg = read_file('storagecfg');
 
 	    __assert_if_modified ($cfg, $digest);
 
@@ -2507,7 +2482,8 @@
 
 	    deactivate_storage ($cfg, $storeid);	
 
-	    write_config ($cfg);
+	    write_file('storagecfg', $cfg);
+
 	}, "disable storage failed");
 }
 

Modified: pve-storage/pve2/pvesm
===================================================================
--- pve-storage/pve2/pvesm	2010-08-16 11:49:42 UTC (rev 5016)
+++ pve-storage/pve2/pvesm	2010-08-16 12:02:55 UTC (rev 5017)
@@ -2,10 +2,17 @@
 
 use strict;
 use Getopt::Long;
+use PVE::INotify qw(read_file);
 use PVE::Storage;
 use Fcntl ':flock';
 use File::Path;
 
+$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
+
+die "please run as root\n" if $> != 0;
+
+PVE::INotify::inotify_init();
+
 sub print_usage {
     my $msg = shift;
 
@@ -186,7 +193,7 @@
 	die "unable to parse size '$sizestr'\n";
     }
 
-    my $cfg = PVE::Storage::load_config();
+    my $cfg = read_file('storagecfg');
     
     my $volid = PVE::Storage::vdisk_alloc ($cfg, $storeid, $vmid, 
 					   $opts->{format}, 
@@ -202,7 +209,7 @@
 
     my $volid = shift;
 
-    my $cfg = PVE::Storage::load_config();
+    my $cfg = read_file('storagecfg');
     
     PVE::Storage::vdisk_free ($cfg, $volid);
 
@@ -218,7 +225,7 @@
 	die "wrong number of arguments\n";
     }
  
-    my $cfg = PVE::Storage::load_config();
+    my $cfg = read_file('storagecfg');
 
     my @sids =  PVE::Storage::storage_ids ($cfg);
 
@@ -304,7 +311,7 @@
 
     my $volid = shift;
 
-    my $cfg = PVE::Storage::load_config();
+    my $cfg = read_file('storagecfg');
 
     my $path = PVE::Storage::path ($cfg, $volid);
 




More information about the pve-devel mailing list