HDFS-15093. RENAME.TO_TRASH is ignored When RENAME.OVERWRITE is specified. Contributed by Ayush Saxena.
(cherry picked from commit e0ae232f66
)
This commit is contained in:
parent
968c95bfba
commit
b26d75ce37
@ -609,7 +609,8 @@ public void rename2(String src, String dst, Rename... options)
|
||||
for (Rename option : options) {
|
||||
if (option == Rename.OVERWRITE) {
|
||||
overwrite = true;
|
||||
} else if (option == Rename.TO_TRASH) {
|
||||
}
|
||||
if (option == Rename.TO_TRASH) {
|
||||
toTrash = true;
|
||||
}
|
||||
}
|
||||
|
@ -688,7 +688,8 @@ public Rename2ResponseProto rename2(RpcController controller,
|
||||
ArrayList<Rename> optionList = new ArrayList<Rename>();
|
||||
if(req.getOverwriteDest()) {
|
||||
optionList.add(Rename.OVERWRITE);
|
||||
} else if(req.hasMoveToTrash() && req.getMoveToTrash()) {
|
||||
}
|
||||
if (req.hasMoveToTrash() && req.getMoveToTrash()) {
|
||||
optionList.add(Rename.TO_TRASH);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,9 @@
|
||||
import org.apache.hadoop.fs.Options.Rename;
|
||||
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
|
||||
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.test.GenericTestUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
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