HDFS-15093. RENAME.TO_TRASH is ignored When RENAME.OVERWRITE is specified. Contributed by Ayush Saxena.
This commit is contained in:
parent
f99fcb26ab
commit
e0ae232f66
@ -609,7 +609,8 @@ public void rename2(String src, String dst, Rename... options)
|
|||||||
for (Rename option : options) {
|
for (Rename option : options) {
|
||||||
if (option == Rename.OVERWRITE) {
|
if (option == Rename.OVERWRITE) {
|
||||||
overwrite = true;
|
overwrite = true;
|
||||||
} else if (option == Rename.TO_TRASH) {
|
}
|
||||||
|
if (option == Rename.TO_TRASH) {
|
||||||
toTrash = true;
|
toTrash = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -688,7 +688,8 @@ public Rename2ResponseProto rename2(RpcController controller,
|
|||||||
ArrayList<Rename> optionList = new ArrayList<Rename>();
|
ArrayList<Rename> optionList = new ArrayList<Rename>();
|
||||||
if(req.getOverwriteDest()) {
|
if(req.getOverwriteDest()) {
|
||||||
optionList.add(Rename.OVERWRITE);
|
optionList.add(Rename.OVERWRITE);
|
||||||
} else if(req.hasMoveToTrash() && req.getMoveToTrash()) {
|
}
|
||||||
|
if (req.hasMoveToTrash() && req.getMoveToTrash()) {
|
||||||
optionList.add(Rename.TO_TRASH);
|
optionList.add(Rename.TO_TRASH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,9 @@
|
|||||||
import org.apache.hadoop.fs.Options.Rename;
|
import org.apache.hadoop.fs.Options.Rename;
|
||||||
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
|
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
|
||||||
import org.apache.hadoop.hdfs.server.blockmanagement.BlockManager;
|
import org.apache.hadoop.hdfs.server.blockmanagement.BlockManager;
|
||||||
|
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter;
|
import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter;
|
||||||
|
import org.apache.hadoop.test.GenericTestUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class TestDFSRename {
|
public class TestDFSRename {
|
||||||
@ -175,4 +177,23 @@ public void testRenameWithOverwrite() throws Exception {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRename2Options() throws Exception {
|
||||||
|
try (MiniDFSCluster cluster = new MiniDFSCluster.Builder(
|
||||||
|
new HdfsConfiguration()).build()) {
|
||||||
|
cluster.waitActive();
|
||||||
|
final DistributedFileSystem dfs = cluster.getFileSystem();
|
||||||
|
Path path = new Path("/test");
|
||||||
|
dfs.mkdirs(path);
|
||||||
|
GenericTestUtils.LogCapturer auditLog =
|
||||||
|
GenericTestUtils.LogCapturer.captureLogs(FSNamesystem.auditLog);
|
||||||
|
dfs.rename(path, new Path("/dir1"),
|
||||||
|
new Rename[] {Rename.OVERWRITE, Rename.TO_TRASH});
|
||||||
|
String auditOut = auditLog.getOutput();
|
||||||
|
assertTrue("Rename should have both OVERWRITE and TO_TRASH "
|
||||||
|
+ "flags at namenode but had only " + auditOut,
|
||||||
|
auditOut.contains("options=[OVERWRITE, TO_TRASH]"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user