[pve-devel] r5659 - in pve-storage/pve2: . PVE
svn-commits at proxmox.com
svn-commits at proxmox.com
Wed Mar 9 10:38:04 CET 2011
Author: dietmar
Date: 2011-03-09 10:38:04 +0100 (Wed, 09 Mar 2011)
New Revision: 5659
Modified:
pve-storage/pve2/ChangeLog
pve-storage/pve2/PVE/Storage.pm
pve-storage/pve2/control.in
pve-storage/pve2/pvesm
Log:
* PVE/Storage.pm (file_size_info): allow to pass timeout
(important when NFS server is down)
(__activate_storage_full): avoid call to mkpath if not necessary
- avoid hang when NFS server is offline
(storage_info): return sizes in bytes
(storage_info): use PVE::Tools::df with timeout
(lvm_vgs): use '--units b' (report size in bytes)
(lvm_lvs): use '--units b' (report size in bytes)
(file_size_info): report size in bytes
* control.in (Depends): remove libfilesys-df-perl
Modified: pve-storage/pve2/ChangeLog
===================================================================
--- pve-storage/pve2/ChangeLog 2011-03-09 07:41:51 UTC (rev 5658)
+++ pve-storage/pve2/ChangeLog 2011-03-09 09:38:04 UTC (rev 5659)
@@ -1,3 +1,17 @@
+2011-03-09 Proxmox Support Team <support at proxmox.com>
+
+ * PVE/Storage.pm (file_size_info): allow to pass timeout
+ (important when NFS server is down)
+ (__activate_storage_full): avoid call to mkpath if not necessary
+ - avoid hang when NFS server is offline
+ (storage_info): return sizes in bytes
+ (storage_info): use PVE::Tools::df with timeout
+ (lvm_vgs): use '--units b' (report size in bytes)
+ (lvm_lvs): use '--units b' (report size in bytes)
+ (file_size_info): report size in bytes
+
+ * control.in (Depends): remove libfilesys-df-perl
+
2011-03-08 Proxmox Support Team <support at proxmox.com>
* PVE/Storage.pm (__activate_storage_full): avoid to create empty
Modified: pve-storage/pve2/PVE/Storage.pm
===================================================================
--- pve-storage/pve2/PVE/Storage.pm 2011-03-09 07:41:51 UTC (rev 5658)
+++ pve-storage/pve2/PVE/Storage.pm 2011-03-09 09:38:04 UTC (rev 5659)
@@ -10,7 +10,6 @@
use File::Basename;
use File::Path;
use IPC::Open2;
-use Filesys::Df;
use Cwd 'abs_path';
use Getopt::Long qw(GetOptionsFromArray);
use Socket;
@@ -1352,7 +1351,7 @@
sub lvm_vgs {
- my $cmd = ['/sbin/vgs', '--separator', ':', '--noheadings', '--units', 'k',
+ my $cmd = ['/sbin/vgs', '--separator', ':', '--noheadings', '--units', 'b',
'--unbuffered', '--nosuffix', '--options',
'vg_name,vg_size,vg_free'];
@@ -1373,7 +1372,7 @@
sub lvm_lvs {
my ($vgname) = @_;
- my $cmd = ['/sbin/lvs', '--separator', ':', '--noheadings', '--units', 'k',
+ my $cmd = ['/sbin/lvs', '--separator', ':', '--noheadings', '--units', 'b',
'--unbuffered', '--nosuffix', '--options',
'vg_name,lv_name,lv_size,uuid,tags'];
@@ -1531,7 +1530,7 @@
}
sub file_size_info {
- my ($filename) = @_;
+ my ($filename, $timeout) = @_;
my $cmd = ['/usr/bin/qemu-img', 'info', $filename];
@@ -1540,21 +1539,21 @@
my $used = 0;
eval {
- run_command ($cmd, outfunc => sub {
+ run_command ($cmd, timeout => $timeout, outfunc => sub {
my $line = shift;
if ($line =~ m/^file format:\s+(\S+)\s*$/) {
$format = $1;
} elsif ($line =~ m/^virtual size:\s\S+\s+\((\d+)\s+bytes\)$/) {
- $size = int ($1/1024);
+ $size = int($1);
} elsif ($line =~ m/^disk size:\s+(\d+(.\d+)?)([KMGT])\s*$/) {
$used = $1;
my $u = $3;
- $used *= 1 if $u eq 'K';
- $used *= 1024 if $u eq 'M';
- $used *= (1024*1024) if $u eq 'G';
- $used *= (1024*1024*1024) if $u eq 'T';
+ $used *= 1024 if $u eq 'K';
+ $used *= (1024*1024) if $u eq 'M';
+ $used *= (1024*1024*1024) if $u eq 'G';
+ $used *= (1024*1024*1024*1024) if $u eq 'T';
}
});
};
@@ -1726,7 +1725,7 @@
my $cmd = ['/bin/mount', '-t', 'nfs', $source, $mountpoint];
if ($options) {
push @$cmd, '-o', $options;
- }
+ }
run_command ($cmd);
}
@@ -1768,18 +1767,30 @@
if ($type eq 'dir' || $type eq 'nfs') {
my $path = $scfg->{path};
- mkpath $path;
- die "unable to activate storage '$storeid' - " .
- "directory '$path' does not exist\n" if ! -d $path;
-
if ($type eq 'nfs') {
my $server = $scfg->{server};
my $export = $scfg->{export};
- if (!nfs_is_mounted ($server, $export, $path, $mountdata)) {
+ if (!nfs_is_mounted ($server, $export, $path, $mountdata)) {
+
+ # NOTE: only call mkpath when not mounted (avoid hang
+ # when NFS server is offline
+
+ mkpath $path;
+
+ die "unable to activate storage '$storeid' - " .
+ "directory '$path' does not exist\n" if ! -d $path;
+
nfs_mount ($server, $export, $path, $scfg->{options});
}
+
+ } else {
+
+ mkpath $path;
+
+ die "unable to activate storage '$storeid' - " .
+ "directory '$path' does not exist\n" if ! -d $path;
}
my $imagedir = get_image_dir ($cfg, $storeid);
@@ -1979,7 +1990,6 @@
total => 0,
avail => 0,
used => 0,
- free => 0,
disable => defined ($ids->{$storeid}->{disable}),
active => 0,
};
@@ -2008,7 +2018,10 @@
$session->{iscsi_sessions} = $iscsi_sessions;
}
- eval { activate_storage_list ($cfg, $slist, $session); };
+ foreach my $storeid (@$slist) {
+ eval { __activate_storage_full ($cfg, $storeid, $session); };
+ warn $@ if $@;
+ }
foreach my $storeid (keys %$ids) {
my $scfg = $ids->{$storeid};
@@ -2026,17 +2039,14 @@
next if !nfs_is_mounted ($server, $export, $path, $mountdata);
}
- my $res = df ($path);
+ my $timeout = 2;
+ my $res = PVE::Tools::df($path, $timeout);
- next if !$res;
+ next if !$res || !$res->{total};
- # available memory = total memory - reserved memory
- my $bavail = $res->{used}+$res->{bavail};
-
- $info->{$storeid}->{total} = $res->{blocks};
- $info->{$storeid}->{avail} = $bavail;
+ $info->{$storeid}->{total} = $res->{total};
+ $info->{$storeid}->{avail} = $res->{used} + $res->{avail};
$info->{$storeid}->{used} = $res->{used};
- $info->{$storeid}->{free} = $bavail - $res->{used};
$info->{$storeid}->{active} = 1;
} elsif ($type eq 'lvm') {
@@ -2053,7 +2063,6 @@
$info->{$storeid}->{total} = $total;
$info->{$storeid}->{avail} = $total;
$info->{$storeid}->{used} = $total - $free;
- $info->{$storeid}->{free} = $free;
$info->{$storeid}->{active} = 1;
}
@@ -2062,7 +2071,6 @@
$info->{$storeid}->{total} = 0;
$info->{$storeid}->{avail} = 0;
$info->{$storeid}->{used} = 0;
- $info->{$storeid}->{free} = 0;
$info->{$storeid}->{active} =
defined ($iscsi_sessions->{$scfg->{target}});
Modified: pve-storage/pve2/control.in
===================================================================
--- pve-storage/pve2/control.in 2011-03-09 07:41:51 UTC (rev 5658)
+++ pve-storage/pve2/control.in 2011-03-09 09:38:04 UTC (rev 5659)
@@ -3,7 +3,7 @@
Section: perl
Priority: optional
Architecture: @@ARCH@@
-Depends: perl (>= 5.6.0-16), libfilesys-df-perl, nfs-common, udev, libpve-common-perl
+Depends: perl (>= 5.6.0-16), nfs-common, udev, libpve-common-perl
Maintainer: Proxmox Support Team <support at proxmox.com>
Description: Proxmox VE storage management library
This package contains the storage management library used by Proxmox VE.
Modified: pve-storage/pve2/pvesm
===================================================================
--- pve-storage/pve2/pvesm 2011-03-09 07:41:51 UTC (rev 5658)
+++ pve-storage/pve2/pvesm 2011-03-09 09:38:04 UTC (rev 5659)
@@ -185,11 +185,11 @@
foreach my $res (sort { $a->{storage} cmp $b->{storage} } @$res) {
my $storeid = $res->{storage};
- my $per = $res->{avail} ? int (0.5 + ($res->{used}*100)/$res->{avail}) : 100;
+ my $per = $res->{avail} ? (0.5 + ($res->{used}*100)/$res->{avail}) : 100;
- printf "%-${maxlen}s %5s %1d %1d %10d %10d %2d%%\n", $storeid,
+ printf "%-${maxlen}s %5s %1d %1d %15d %15d %.2f%%\n", $storeid,
$res->{type},$res->{disable}, $res->{active},
- $res->{avail}, $res->{used}, $per;
+ $res->{used}/1024, $res->{avail}/1024, $per;
}
};
More information about the pve-devel
mailing list