HDFS-8444. Erasure Coding: fix cannot rename a zone dir (Contributed by Walter Su)
This commit is contained in:
parent
9b54e66f3e
commit
2d847e7d62
|
@ -268,3 +268,6 @@
|
|||
|
||||
HDFS-8336. Expose some administrative erasure coding operations to HdfsAdmin
|
||||
(Uma Maheswara Rao G via vinayakumarb)
|
||||
|
||||
HDFS-8444. Erasure Coding: fix cannot rename a zone dir
|
||||
(Walter Su via vinayakumarb)
|
||||
|
|
|
@ -153,8 +153,13 @@ public class ErasureCodingZoneManager {
|
|||
void checkMoveValidity(INodesInPath srcIIP, INodesInPath dstIIP, String src)
|
||||
throws IOException {
|
||||
assert dir.hasReadLock();
|
||||
final ECSchema srcSchema = getECSchema(srcIIP);
|
||||
final ECSchema dstSchema = getECSchema(dstIIP);
|
||||
final ErasureCodingZone srcZone = getECZone(srcIIP);
|
||||
final ErasureCodingZone dstZone = getECZone(dstIIP);
|
||||
if (srcZone != null && srcZone.getDir().equals(src) && dstZone == null) {
|
||||
return;
|
||||
}
|
||||
final ECSchema srcSchema = (srcZone != null) ? srcZone.getSchema() : null;
|
||||
final ECSchema dstSchema = (dstZone != null) ? dstZone.getSchema() : null;
|
||||
if ((srcSchema != null && !srcSchema.equals(dstSchema)) ||
|
||||
(dstSchema != null && !dstSchema.equals(srcSchema))) {
|
||||
throw new IOException(
|
||||
|
|
|
@ -119,15 +119,20 @@ public class TestErasureCodingZones {
|
|||
final Path srcFile = new Path(srcECDir, "foo");
|
||||
fs.create(srcFile);
|
||||
|
||||
/* Verify that a file can be moved between 2 EC zones */
|
||||
try {
|
||||
fs.rename(srcFile, dstECDir);
|
||||
} catch (IOException e) {
|
||||
fail("A file should be able to move between 2 EC zones " + e);
|
||||
}
|
||||
// Test move dir
|
||||
// Move EC dir under non-EC dir
|
||||
final Path newDir = new Path("/srcEC_new");
|
||||
fs.rename(srcECDir, newDir);
|
||||
fs.rename(newDir, srcECDir); // move back
|
||||
|
||||
// Move the file back
|
||||
fs.rename(new Path(dstECDir, "foo"), srcECDir);
|
||||
// Move EC dir under another EC dir
|
||||
fs.rename(srcECDir, dstECDir);
|
||||
fs.rename(new Path("/dstEC/srcEC"), srcECDir); // move back
|
||||
|
||||
// Test move file
|
||||
/* Verify that a file can be moved between 2 EC zones */
|
||||
fs.rename(srcFile, dstECDir);
|
||||
fs.rename(new Path(dstECDir, "foo"), srcECDir); // move back
|
||||
|
||||
/* Verify that a file cannot be moved from a non-EC dir to an EC zone */
|
||||
final Path nonECDir = new Path("/nonEC");
|
||||
|
|
Loading…
Reference in New Issue