Author: bobby
Date: Thu Feb 2 17:19:26 2012
New Revision: 1239730
URL: http://svn.apache.org/viewvc?rev=1239730&view=rev
Log:
svn merge -c 1239727 FIXES HADOOP-8001
Modified:
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ChecksumFileSystem.java
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestChecksumFileSystem.java
Modified:
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1239730&r1=1239729&r2=1239730&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt
Thu Feb 2 17:19:26 2012
@@ -95,6 +95,8 @@ Release 0.23.1 - Unreleased
OPTIMIZATIONS
BUG FIXES
+ HADOOP-8001 ChecksumFileSystem's rename doesn't correctly handle checksum
+ files. (Daryn Sharp via bobby)
HADOOP-8006 TestFSInputChecker is failing in trunk.
(Daryn Sharp via bobby)
Modified:
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ChecksumFileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ChecksumFileSystem.java?rev=1239730&r1=1239729&r2=1239730&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ChecksumFileSystem.java
(original)
+++
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ChecksumFileSystem.java
Thu Feb 2 17:19:26 2012
@@ -474,18 +474,21 @@ public abstract class ChecksumFileSystem
if (fs.isDirectory(src)) {
return fs.rename(src, dst);
} else {
+ if (fs.isDirectory(dst)) {
+ dst = new Path(dst, src.getName());
+ }
boolean value = fs.rename(src, dst);
if (!value)
return false;
- Path checkFile = getChecksumFile(src);
- if (fs.exists(checkFile)) { //try to rename checksum
- if (fs.isDirectory(dst)) {
- value = fs.rename(checkFile, dst);
- } else {
- value = fs.rename(checkFile, getChecksumFile(dst));
- }
+ Path srcCheckFile = getChecksumFile(src);
+ Path dstCheckFile = getChecksumFile(dst);
+ if (fs.exists(srcCheckFile)) { //try to rename checksum
+ value = fs.rename(srcCheckFile, dstCheckFile);
+ } else if (fs.exists(dstCheckFile)) {
+ // no src checksum, so remove dst checksum
+ value = fs.delete(dstCheckFile, true);
}
return value;
Modified:
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestChecksumFileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestChecksumFileSystem.java?rev=1239730&r1=1239729&r2=1239730&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestChecksumFileSystem.java
(original)
+++
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestChecksumFileSystem.java
Thu Feb 2 17:19:26 2012
@@ -203,4 +203,58 @@ public class TestChecksumFileSystem {
String str = readFile(localFs, testPath, 1024);
assertEquals("testing stale checksum", str);
}
+
+ @Test
+ public void testRenameFileToFile() throws Exception {
+ Path srcPath = new Path(TEST_ROOT_DIR, "testRenameSrc");
+ Path dstPath = new Path(TEST_ROOT_DIR, "testRenameDst");
+ verifyRename(srcPath, dstPath, false);
+ }
+
+ @Test
+ public void testRenameFileIntoDir() throws Exception {
+ Path srcPath = new Path(TEST_ROOT_DIR, "testRenameSrc");
+ Path dstPath = new Path(TEST_ROOT_DIR, "testRenameDir");
+ localFs.mkdirs(dstPath);
+ verifyRename(srcPath, dstPath, true);
+ }
+
+ @Test
+ public void testRenameFileIntoDirFile() throws Exception {
+ Path srcPath = new Path(TEST_ROOT_DIR, "testRenameSrc");
+ Path dstPath = new Path(TEST_ROOT_DIR, "testRenameDir/testRenameDst");
+ assertTrue(localFs.mkdirs(dstPath));
+ verifyRename(srcPath, dstPath, false);
+ }
+
+
+ void verifyRename(Path srcPath, Path dstPath, boolean dstIsDir)
+ throws Exception {
+ localFs.delete(srcPath,true);
+ localFs.delete(dstPath,true);
+
+ Path realDstPath = dstPath;
+ if (dstIsDir) {
+ localFs.mkdirs(dstPath);
+ realDstPath = new Path(dstPath, srcPath.getName());
+ }
+
+ // ensure file + checksum are moved
+ writeFile(localFs, srcPath, 1);
+ assertTrue(localFs.exists(localFs.getChecksumFile(srcPath)));
+ assertTrue(localFs.rename(srcPath, dstPath));
+ assertTrue(localFs.exists(localFs.getChecksumFile(realDstPath)));
+
+ // create a file with no checksum, rename, ensure dst checksum is removed
+ writeFile(localFs.getRawFileSystem(), srcPath, 1);
+ assertFalse(localFs.exists(localFs.getChecksumFile(srcPath)));
+ assertTrue(localFs.rename(srcPath, dstPath));
+ assertFalse(localFs.exists(localFs.getChecksumFile(realDstPath)));
+
+ // create file with checksum, rename over prior dst with no checksum
+ writeFile(localFs, srcPath, 1);
+ assertTrue(localFs.exists(localFs.getChecksumFile(srcPath)));
+ assertTrue(localFs.rename(srcPath, dstPath));
+ assertTrue(localFs.exists(localFs.getChecksumFile(realDstPath)));
+ }
}