[pve-devel] r5658 - in pve-common/trunk/data: . PVE

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Mar 9 08:41:51 CET 2011


Author: dietmar
Date: 2011-03-09 08:41:51 +0100 (Wed, 09 Mar 2011)
New Revision: 5658

Modified:
   pve-common/trunk/data/ChangeLog
   pve-common/trunk/data/PVE/Tools.pm
Log:
 implement interruptible version of 'df'


Modified: pve-common/trunk/data/ChangeLog
===================================================================
--- pve-common/trunk/data/ChangeLog	2011-03-08 07:35:02 UTC (rev 5657)
+++ pve-common/trunk/data/ChangeLog	2011-03-09 07:41:51 UTC (rev 5658)
@@ -1,3 +1,8 @@
+2011-03-09  Proxmox Support Team  <support at proxmox.com>
+
+	* PVE/Tools.pm (df): implement interruptible version of 'df'
+	(workd with timeout on NFS)
+
 2011-03-03  Proxmox Support Team  <support at proxmox.com>
 
 	* PVE/ProcFSTools.pm (read_memory_usage): memory usage of current

Modified: pve-common/trunk/data/PVE/Tools.pm
===================================================================
--- pve-common/trunk/data/PVE/Tools.pm	2011-03-08 07:35:02 UTC (rev 5657)
+++ pve-common/trunk/data/PVE/Tools.pm	2011-03-09 07:41:51 UTC (rev 5658)
@@ -431,4 +431,37 @@
     die "unable to find free vnc port";
 };
 
+# NOTE: NFS syscall can't be interrupted, so alarm does 
+# not work to provide timeouts.
+# from 'man nfs': "Only SIGKILL can interrupt a pending NFS operation"
+# So the spawn external 'df' process instead of using
+# Filesys::Df (which uses statfs syscall)
+sub df {
+    my ($path, $timeout) = @_;
+
+    my $cmd = [ 'df', '-P', '-B', '1', $path];
+
+    my $res = {
+	total => 0,
+	used => 0,
+	avail => 0,
+    };
+
+    my $parser = sub {
+	my $line = shift;
+	if (my ($fsid, $total, $used, $avail) = $line =~
+	    m/^(\S+.*)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+%\s.*$/) {
+	    $res = {
+		total => $total,
+		used => $used,
+		avail => $avail,
+	    };
+	}
+    };
+    eval { run_command($cmd, timeout => $timeout, outfunc => $parser); };
+    warn $@ if $@;
+
+    return $res;
+}
+
 1;



More information about the pve-devel mailing list