diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 3ddb70c348..59d947dfc6 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -344,6 +344,9 @@ Release 2.5.0 - UNRELEASED HADOOP-10459. distcp V2 doesn't preserve root dir's attributes when -p is specified. (Yongjun Zhang via atm) + HADOOP-10462. DF#getFilesystem is not parsing the command output. + (Akira AJISAKA via umamahesh) + Release 2.4.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java index 8f17983395..41d77de87d 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java @@ -22,7 +22,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; -import java.util.EnumSet; import java.util.NoSuchElementException; import java.util.StringTokenizer; @@ -75,6 +74,8 @@ public String getFilesystem() throws IOException { return this.filesystem; } else { run(); + verifyExitCode(); + parseOutput(); return filesystem; } } @@ -114,14 +115,7 @@ public String getMount() throws IOException { 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()); - } + verifyExitCode(); parseOutput(); } @@ -204,6 +198,17 @@ protected void parseOutput() throws IOException { } } + private void verifyExitCode() throws IOException { + if (getExitCode() != 0) { + StringBuilder sb = + new StringBuilder("df could not be run successfully: "); + for (String line : output) { + sb.append(line); + } + throw new IOException(sb.toString()); + } + } + public static void main(String[] args) throws Exception { String path = "."; if (args.length > 0) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java index 80a6b5e437..d457c0e8a4 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestDFVariations.java @@ -25,7 +25,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.StringReader; -import java.util.EnumSet; import java.util.Random; import org.apache.hadoop.test.GenericTestUtils; @@ -48,16 +47,19 @@ protected String[] getExecString() { } @Test(timeout=5000) - public void testMountAndFileSystem() throws Exception { + public void testMount() 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()); + } + @Test(timeout=5000) + public void testFileSystem() throws Exception { + XXDF df = new XXDF(); + String expectedFileSystem = + Shell.WINDOWS ? df.getDirPath().substring(0, 2) : "/dev/sda3"; assertEquals("Invalid filesystem", expectedFileSystem, df.getFilesystem()); }