svn merge -c 1239727 FIXES HADOOP-8001
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1239730 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
818dfb0c5b
commit
7c0614e301
|
@ -95,6 +95,8 @@ Release 0.23.1 - Unreleased
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
HADOOP-8001 ChecksumFileSystem's rename doesn't correctly handle checksum
|
||||||
|
files. (Daryn Sharp via bobby)
|
||||||
|
|
||||||
HADOOP-8006 TestFSInputChecker is failing in trunk.
|
HADOOP-8006 TestFSInputChecker is failing in trunk.
|
||||||
(Daryn Sharp via bobby)
|
(Daryn Sharp via bobby)
|
||||||
|
|
|
@ -474,18 +474,21 @@ public abstract class ChecksumFileSystem extends FilterFileSystem {
|
||||||
if (fs.isDirectory(src)) {
|
if (fs.isDirectory(src)) {
|
||||||
return fs.rename(src, dst);
|
return fs.rename(src, dst);
|
||||||
} else {
|
} else {
|
||||||
|
if (fs.isDirectory(dst)) {
|
||||||
|
dst = new Path(dst, src.getName());
|
||||||
|
}
|
||||||
|
|
||||||
boolean value = fs.rename(src, dst);
|
boolean value = fs.rename(src, dst);
|
||||||
if (!value)
|
if (!value)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Path checkFile = getChecksumFile(src);
|
Path srcCheckFile = getChecksumFile(src);
|
||||||
if (fs.exists(checkFile)) { //try to rename checksum
|
Path dstCheckFile = getChecksumFile(dst);
|
||||||
if (fs.isDirectory(dst)) {
|
if (fs.exists(srcCheckFile)) { //try to rename checksum
|
||||||
value = fs.rename(checkFile, dst);
|
value = fs.rename(srcCheckFile, dstCheckFile);
|
||||||
} else {
|
} else if (fs.exists(dstCheckFile)) {
|
||||||
value = fs.rename(checkFile, getChecksumFile(dst));
|
// no src checksum, so remove dst checksum
|
||||||
}
|
value = fs.delete(dstCheckFile, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
|
|
|
@ -203,4 +203,58 @@ public class TestChecksumFileSystem {
|
||||||
String str = readFile(localFs, testPath, 1024);
|
String str = readFile(localFs, testPath, 1024);
|
||||||
assertEquals("testing stale checksum", str);
|
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)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue