HDFS-16628. RBF: Correct target directory when move to trash for kerberos login user. (#4974)
Signed-off-by: Akira Ajisaka <aajisaka@apache.org>
This commit is contained in:
parent
6847ec0647
commit
760144f135
|
@ -359,7 +359,7 @@ public class MountTableResolver
|
||||||
public static String getTrashRoot() throws IOException {
|
public static String getTrashRoot() throws IOException {
|
||||||
// Gets the Trash directory for the current user.
|
// Gets the Trash directory for the current user.
|
||||||
return FileSystem.USER_HOME_PREFIX + "/" +
|
return FileSystem.USER_HOME_PREFIX + "/" +
|
||||||
RouterRpcServer.getRemoteUser().getUserName() + "/" +
|
RouterRpcServer.getRemoteUser().getShortUserName() + "/" +
|
||||||
FileSystem.TRASH_PREFIX;
|
FileSystem.TRASH_PREFIX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,44 @@ public class TestRouterTrash {
|
||||||
assertEquals(2, fileStatuses.length);
|
assertEquals(2, fileStatuses.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMoveToTrashWithKerberosUser() throws IOException,
|
||||||
|
URISyntaxException, InterruptedException {
|
||||||
|
//Constructs the structure of the KerBoers user name
|
||||||
|
String kerberosUser = "randomUser/dev@HADOOP.COM";
|
||||||
|
UserGroupInformation ugi = UserGroupInformation.createRemoteUser(kerberosUser);
|
||||||
|
MountTable addEntry = MountTable.newInstance(MOUNT_POINT,
|
||||||
|
Collections.singletonMap(ns1, MOUNT_POINT));
|
||||||
|
assertTrue(addMountTable(addEntry));
|
||||||
|
// current user client
|
||||||
|
MiniRouterDFSCluster.NamenodeContext nn1Context = cluster.getNamenode(ns1, null);
|
||||||
|
DFSClient currentUserClientNs0 = nnContext.getClient();
|
||||||
|
DFSClient currentUserClientNs1 = nn1Context.getClient();
|
||||||
|
|
||||||
|
currentUserClientNs0.setOwner("/", ugi.getShortUserName(), ugi.getShortUserName());
|
||||||
|
currentUserClientNs1.setOwner("/", ugi.getShortUserName(), ugi.getShortUserName());
|
||||||
|
|
||||||
|
// test user client
|
||||||
|
DFSClient testUserClientNs1 = nn1Context.getClient(ugi);
|
||||||
|
testUserClientNs1.mkdirs(MOUNT_POINT, new FsPermission("777"), true);
|
||||||
|
assertTrue(testUserClientNs1.exists(MOUNT_POINT));
|
||||||
|
// create test file
|
||||||
|
testUserClientNs1.create(FILE, true);
|
||||||
|
Path filePath = new Path(FILE);
|
||||||
|
|
||||||
|
FileStatus[] fileStatuses = routerFs.listStatus(filePath);
|
||||||
|
assertEquals(1, fileStatuses.length);
|
||||||
|
assertEquals(ugi.getShortUserName(), fileStatuses[0].getOwner());
|
||||||
|
// move to Trash
|
||||||
|
Configuration routerConf = routerContext.getConf();
|
||||||
|
FileSystem fs = DFSTestUtil.getFileSystemAs(ugi, routerConf);
|
||||||
|
Trash trash = new Trash(fs, routerConf);
|
||||||
|
assertTrue(trash.moveToTrash(filePath));
|
||||||
|
fileStatuses = fs.listStatus(
|
||||||
|
new Path("/user/" + ugi.getShortUserName() + "/.Trash/Current" + MOUNT_POINT));
|
||||||
|
assertEquals(1, fileStatuses.length);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteToTrashExistMountPoint() throws IOException,
|
public void testDeleteToTrashExistMountPoint() throws IOException,
|
||||||
URISyntaxException, InterruptedException {
|
URISyntaxException, InterruptedException {
|
||||||
|
|
Loading…
Reference in New Issue