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:
Xing Lin 2022-10-11 00:14:39 -07:00 committed by GitHub
parent 6847ec0647
commit 760144f135
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 1 deletions

View File

@ -359,7 +359,7 @@ public class MountTableResolver
public static String getTrashRoot() throws IOException {
// Gets the Trash directory for the current user.
return FileSystem.USER_HOME_PREFIX + "/" +
RouterRpcServer.getRemoteUser().getUserName() + "/" +
RouterRpcServer.getRemoteUser().getShortUserName() + "/" +
FileSystem.TRASH_PREFIX;
}

View File

@ -189,6 +189,44 @@ public class TestRouterTrash {
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
public void testDeleteToTrashExistMountPoint() throws IOException,
URISyntaxException, InterruptedException {