From bc0eb9d993ab6e81f5278e377b1a2c26cc228bc6 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Fri, 24 May 2013 18:45:39 +0000 Subject: [PATCH] HDFS-4743. Merge r1476591 from trunk git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1486162 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 + .../TestNNStorageRetentionManager.java | 71 +++++++++++++------ 2 files changed, 53 insertions(+), 21 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 41aa67cc029..f9447a3ee13 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -388,6 +388,9 @@ Release 2.0.5-beta - UNRELEASED HDFS-4741. TestStorageRestore#testStorageRestoreFailure fails on Windows. (Arpit Agarwal via suresh) + HDFS-4743. TestNNStorageRetentionManager fails on Windows. + (Chris Nauroth via suresh) + Release 2.0.4-alpha - 2013-04-25 INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNNStorageRetentionManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNNStorageRetentionManager.java index 9e13a4ad1e8..1eec8d2e58e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNNStorageRetentionManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNNStorageRetentionManager.java @@ -21,6 +21,7 @@ import static org.apache.hadoop.hdfs.server.namenode.NNStorage.getFinalizedEdits import static org.apache.hadoop.hdfs.server.namenode.NNStorage.getImageFileName; import static org.apache.hadoop.hdfs.server.namenode.NNStorage.getInProgressEditsFileName; +import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.List; @@ -247,30 +248,32 @@ public class TestNNStorageRetentionManager { .purgeLog(logsPurgedCaptor.capture()); // Check images - Set purgedPaths = Sets.newHashSet(); + Set purgedPaths = Sets.newLinkedHashSet(); for (FSImageFile purged : imagesPurgedCaptor.getAllValues()) { - purgedPaths.add(purged.getFile().toString()); + purgedPaths.add(fileToPath(purged.getFile())); } - Assert.assertEquals(Joiner.on(",").join(tc.expectedPurgedImages), - Joiner.on(",").join(purgedPaths)); + Assert.assertEquals( + Joiner.on(",").join(filesToPaths(tc.expectedPurgedImages)), + Joiner.on(",").join(purgedPaths)); // Check images purgedPaths.clear(); for (EditLogFile purged : logsPurgedCaptor.getAllValues()) { - purgedPaths.add(purged.getFile().toString()); + purgedPaths.add(fileToPath(purged.getFile())); } - Assert.assertEquals(Joiner.on(",").join(tc.expectedPurgedLogs), - Joiner.on(",").join(purgedPaths)); + Assert.assertEquals( + Joiner.on(",").join(filesToPaths(tc.expectedPurgedLogs)), + Joiner.on(",").join(purgedPaths)); } private static class TestCaseDescription { - private Map dirRoots = Maps.newHashMap(); - private Set expectedPurgedLogs = Sets.newHashSet(); - private Set expectedPurgedImages = Sets.newHashSet(); + private Map dirRoots = Maps.newHashMap(); + private Set expectedPurgedLogs = Sets.newLinkedHashSet(); + private Set expectedPurgedImages = Sets.newLinkedHashSet(); private static class FakeRoot { NameNodeDirType type; - List files; + List files; FakeRoot(NameNodeDirType type) { this.type = type; @@ -280,33 +283,35 @@ public class TestNNStorageRetentionManager { StorageDirectory mockStorageDir() { return FSImageTestUtil.mockStorageDirectory( type, false, - files.toArray(new String[0])); + filesToPaths(files).toArray(new String[0])); } } void addRoot(String root, NameNodeDirType dir) { - dirRoots.put(root, new FakeRoot(dir)); + dirRoots.put(new File(root), new FakeRoot(dir)); } - private void addFile(String path) { - for (Map.Entry entry : dirRoots.entrySet()) { - if (path.startsWith(entry.getKey())) { - entry.getValue().files.add(path); + private void addFile(File file) { + for (Map.Entry entry : dirRoots.entrySet()) { + if (fileToPath(file).startsWith(fileToPath(entry.getKey()))) { + entry.getValue().files.add(file); } } } void addLog(String path, boolean expectPurge) { - addFile(path); + File file = new File(path); + addFile(file); if (expectPurge) { - expectedPurgedLogs.add(path); + expectedPurgedLogs.add(file); } } void addImage(String path, boolean expectPurge) { - addFile(path); + File file = new File(path); + addFile(file); if (expectPurge) { - expectedPurgedImages.add(path); + expectedPurgedImages.add(file); } } @@ -365,6 +370,30 @@ public class TestNNStorageRetentionManager { } } + /** + * Converts a file to a platform-agnostic URI path. + * + * @param file File to convert + * @return String path + */ + private static String fileToPath(File file) { + return file.toURI().getPath(); + } + + /** + * Converts multiple files to platform-agnostic URI paths. + * + * @param files Collection files to convert + * @return Collection paths + */ + private static Collection filesToPaths(Collection files) { + List paths = Lists.newArrayList(); + for (File file: files) { + paths.add(fileToPath(file)); + } + return paths; + } + private static NNStorage mockStorageForDirs(final StorageDirectory ... mockDirs) throws IOException { NNStorage mockStorage = Mockito.mock(NNStorage.class);