HDFS-15302. Backport HDFS-15286 to branch-2.x. Contributed by hemanthboyina.
This commit is contained in:
parent
712da57658
commit
b22fb90350
@ -151,7 +151,7 @@ private static INodeFile[] verifySrcFiles(FSDirectory fsd, String[] srcs,
|
|||||||
+ " is referred by some other reference in some snapshot.");
|
+ " is referred by some other reference in some snapshot.");
|
||||||
}
|
}
|
||||||
// source file cannot be the same with the target file
|
// source file cannot be the same with the target file
|
||||||
if (srcINode == targetINode) {
|
if (srcINode.equals(targetINode)) {
|
||||||
throw new HadoopIllegalArgumentException("concat: the src file " + src
|
throw new HadoopIllegalArgumentException("concat: the src file " + src
|
||||||
+ " is the same with the target file " + targetIIP.getPath());
|
+ " is the same with the target file " + targetIIP.getPath());
|
||||||
}
|
}
|
||||||
|
@ -524,4 +524,44 @@ public void testConcatReservedRelativePaths() throws IOException {
|
|||||||
GenericTestUtils.assertExceptionContains(errMsg, e);
|
GenericTestUtils.assertExceptionContains(errMsg, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test concat on same source and target file which is a inode reference.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testConcatOnSameFile() throws Exception {
|
||||||
|
String dir = "/dir1";
|
||||||
|
Path trgDir = new Path(dir);
|
||||||
|
dfs.mkdirs(new Path(dir));
|
||||||
|
|
||||||
|
// create a source file
|
||||||
|
String dir2 = "/dir2";
|
||||||
|
Path srcDir = new Path(dir2);
|
||||||
|
dfs.mkdirs(srcDir);
|
||||||
|
dfs.allowSnapshot(srcDir);
|
||||||
|
Path src = new Path(srcDir, "file1");
|
||||||
|
DFSTestUtil.createFile(dfs, src, 512, (short) 2, 0);
|
||||||
|
|
||||||
|
// make the file as an Inode reference and delete the reference
|
||||||
|
dfs.createSnapshot(srcDir, "s1");
|
||||||
|
dfs.rename(src, trgDir);
|
||||||
|
dfs.deleteSnapshot(srcDir, "s1");
|
||||||
|
Path[] srcs = new Path[1];
|
||||||
|
srcs[0] = new Path(dir, "file1");
|
||||||
|
|
||||||
|
// perform concat
|
||||||
|
try {
|
||||||
|
dfs.concat(srcs[0], srcs);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
GenericTestUtils.assertExceptionContains(
|
||||||
|
"concat: the src file /dir1/file1 is the same with the target", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// the file should exists and read the file
|
||||||
|
byte[] buff = new byte[1080];
|
||||||
|
FSDataInputStream stream = dfs.open(srcs[0]);
|
||||||
|
stream.readFully(0, buff, 0, 512);
|
||||||
|
|
||||||
|
assertEquals(1, dfs.getContentSummary(new Path(dir)).getFileCount());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user