You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sz...@apache.org on 2013/03/22 07:26:52 UTC
svn commit: r1459642 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: CHANGES.txt
src/main/java/org/apache/hadoop/fs/DF.java
src/test/java/org/apache/hadoop/fs/TestDFVariations.java
Author: szetszwo
Date: Fri Mar 22 06:26:52 2013
New Revision: 1459642
URL: http://svn.apache.org/r1459642
Log:
HADOOP-9387. Fix DF so that it won't execute a shell command on Windows to compute the file system/mount point. Contributed by Ivan Mitic
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1459642&r1=1459641&r2=1459642&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Fri Mar 22 06:26:52 2013
@@ -576,6 +576,9 @@ Release 2.0.5-beta - UNRELEASED
HADOOP-9299. kerberos name resolution is kicking in even when kerberos
is not configured (daryn)
+ HADOOP-9387. Fix DF so that it won't execute a shell command on Windows
+ to compute the file system/mount point. (Ivan Mitic via szetszwo)
+
Release 2.0.4-alpha - UNRELEASED
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java?rev=1459642&r1=1459641&r2=1459642&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java Fri Mar 22 06:26:52 2013
@@ -50,37 +50,6 @@ public class DF extends Shell {
private ArrayList<String> output;
- enum OSType {
- OS_TYPE_UNIX("UNIX"),
- OS_TYPE_WIN("Windows"),
- OS_TYPE_SOLARIS("SunOS"),
- OS_TYPE_MAC("Mac"),
- OS_TYPE_AIX("AIX");
-
- private String id;
- OSType(String id) {
- this.id = id;
- }
- public boolean match(String osStr) {
- return osStr != null && osStr.indexOf(id) >= 0;
- }
- String getId() {
- return id;
- }
- }
-
- private static final String OS_NAME = System.getProperty("os.name");
- private static final OSType OS_TYPE = getOSType(OS_NAME);
-
- protected static OSType getOSType(String osName) {
- for (OSType ost : EnumSet.allOf(OSType.class)) {
- if (ost.match(osName)) {
- return ost;
- }
- }
- return OSType.OS_TYPE_UNIX;
- }
-
public DF(File path, Configuration conf) throws IOException {
this(path, conf.getLong(CommonConfigurationKeys.FS_DF_INTERVAL_KEY, DF.DF_INTERVAL_DEFAULT));
}
@@ -92,10 +61,6 @@ public class DF extends Shell {
this.output = new ArrayList<String>();
}
- protected OSType getOSType() {
- return OS_TYPE;
- }
-
/// ACCESSORS
/** @return the canonical path to the volume we're checking. */
@@ -105,8 +70,13 @@ public class DF extends Shell {
/** @return a string indicating which filesystem volume we're checking. */
public String getFilesystem() throws IOException {
- run();
- return filesystem;
+ if (Shell.WINDOWS) {
+ this.filesystem = dirFile.getCanonicalPath().substring(0, 2);
+ return this.filesystem;
+ } else {
+ run();
+ return filesystem;
+ }
}
/** @return the capacity of the measured filesystem in bytes. */
@@ -138,16 +108,23 @@ public class DF extends Shell {
throw new FileNotFoundException("Specified path " + dirFile.getPath()
+ "does not exist");
}
- run();
- // Skip parsing if df was not successful
- if (getExitCode() != 0) {
- StringBuffer sb = new StringBuffer("df could not be run successfully: ");
- for (String line: output) {
- sb.append(line);
+
+ if (Shell.WINDOWS) {
+ // Assume a drive letter for a mount point
+ this.mount = dirFile.getCanonicalPath().substring(0, 2);
+ } else {
+ run();
+ // Skip parsing if df was not successful
+ if (getExitCode() != 0) {
+ StringBuffer sb = new StringBuffer("df could not be run successfully: ");
+ for (String line: output) {
+ sb.append(line);
+ }
+ throw new IOException(sb.toString());
}
- throw new IOException(sb.toString());
+ parseOutput();
}
- parseOutput();
+
return mount;
}
@@ -164,23 +141,15 @@ public class DF extends Shell {
}
@Override
- protected void run() throws IOException {
- if (WINDOWS) {
- try {
- this.mount = dirFile.getCanonicalPath().substring(0,2);
- } catch (IOException e) {
- }
- return;
- }
- super.run();
- }
-
- @Override
protected String[] getExecString() {
// ignoring the error since the exit code it enough
- return (WINDOWS)? new String[]{"cmd", "/c", "df -k " + dirPath + " 2>nul"}:
- new String[] {"bash","-c","exec 'df' '-k' '-P' '" + dirPath
+ if (Shell.WINDOWS){
+ throw new AssertionError(
+ "DF.getExecString() should never be called on Windows");
+ } else {
+ return new String[] {"bash","-c","exec 'df' '-k' '-P' '" + dirPath
+ "' 2>/dev/null"};
+ }
}
@Override
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java?rev=1459642&r1=1459641&r2=1459642&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java Fri Mar 22 06:26:52 2013
@@ -36,15 +36,10 @@ import static org.junit.Assert.*;
public class TestDFVariations {
public static class XXDF extends DF {
- private final String osName;
- public XXDF(String osName) throws IOException {
+ public XXDF() throws IOException {
super(new File(System.getProperty("test.build.data","/tmp")), 0L);
- this.osName = osName;
- }
- @Override
- public DF.OSType getOSType() {
- return DF.getOSType(osName);
}
+
@Override
protected String[] getExecString() {
return new String[] { "echo", "IGNORE\n",
@@ -53,15 +48,20 @@ public class TestDFVariations {
}
@Test(timeout=5000)
- public void testOSParsing() throws Exception {
- for (DF.OSType ost : EnumSet.allOf(DF.OSType.class)) {
- XXDF df = new XXDF(ost.getId());
- assertEquals(ost.getId() + " mount",
- Shell.WINDOWS ? df.getDirPath().substring(0, 2) : "/foo/bar",
- df.getMount());
- }
+ public void testMountAndFileSystem() throws Exception {
+ XXDF df = new XXDF();
+ String expectedMount =
+ Shell.WINDOWS ? df.getDirPath().substring(0, 2) : "/foo/bar";
+ String expectedFileSystem =
+ Shell.WINDOWS ? df.getDirPath().substring(0, 2) : "/dev/sda3";
+
+ assertEquals("Invalid mount point",
+ expectedMount, df.getMount());
+
+ assertEquals("Invalid filesystem",
+ expectedFileSystem, df.getFilesystem());
}
-
+
@Test(timeout=5000)
public void testDFInvalidPath() throws Exception {
// Generate a path that doesn't exist