[
https://issues.apache.org/jira/browse/HDFS-16816?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17624780#comment-17624780
]
ASF GitHub Bot commented on HDFS-16816:
---------------------------------------
xinglin commented on code in PR #5071:
URL: https://github.com/apache/hadoop/pull/5071#discussion_r1006245564
##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterTrash.java:
##########
@@ -144,6 +145,95 @@ private boolean addMountTable(final MountTable entry)
throws IOException {
return addResponse.getStatus();
}
+ /**
+ * We manually create the trash root for TEST_USER. Then, moveToTrash
+ * shall not cause the router to create user's home dir anymore.
+ *
+ * We compare the modification of user home dir before and after moveToTrash,
+ * to verify that we don't try to re-create user home dir once it already
+ * exists. We need to pre-create the trash root, instead of user home dir,
+ * because adding a subdir to a dir will change the dir's modification time.
+ */
+ @Test
+ public void testMoveToTrashAutoCreateUserHomeAlreadyExisted()
+ throws IOException, URISyntaxException, InterruptedException {
+ MountTable addEntry = MountTable.newInstance(MOUNT_POINT,
+ Collections.singletonMap(ns0, MOUNT_POINT));
+ assertTrue(addMountTable(addEntry));
+ String testUserHome = "/user/" + TEST_USER;
+ String testUserTrashRoot = testUserHome + "/.Trash";
+
+ // Set owner to TEST_USER for root dir
+ DFSClient superUserClient = nnContext.getClient();
+ superUserClient.setOwner("/", TEST_USER, TEST_USER);
+
+ // Create MOUNT_POINT and user's trash root
+ UserGroupInformation ugi =
UserGroupInformation.createRemoteUser(TEST_USER);
+ DFSClient client = nnContext.getClient(ugi);
+ client.mkdirs(MOUNT_POINT, new FsPermission("777"), true);
+ assertTrue(client.exists(MOUNT_POINT));
+ client.mkdirs(testUserTrashRoot, new FsPermission("775"), true);
+ assertTrue(client.exists(testUserTrashRoot));
+
+ // Create test file
+ client.create(FILE, true);
+ Path filePath = new Path(FILE);
+
+ // Get the fileStatus before moveToTrash
+ HdfsFileStatus status = client.getFileInfo(testUserHome);
+
+ // Test moveToTrash by TEST_USER
+ String trashPath = "/user/" + TEST_USER + "/.Trash/Current" + FILE;
+ Configuration routerConf = routerContext.getConf();
+ FileSystem fs = DFSTestUtil.getFileSystemAs(ugi, routerConf);
+ Trash trash = new Trash(fs, routerConf);
+ assertTrue(trash.moveToTrash(filePath));
+ assertTrue(nnFs.exists(new Path(trashPath)));
+
+ HdfsFileStatus status2 = client.getFileInfo(testUserHome);
+ assertEquals(status.getModificationTime(), status2.getModificationTime());
Review Comment:
replaced with a test using a mocked object.
> RBF: auto-create user home dir for trash paths by router
> --------------------------------------------------------
>
> Key: HDFS-16816
> URL: https://issues.apache.org/jira/browse/HDFS-16816
> Project: Hadoop HDFS
> Issue Type: Improvement
> Components: rbf
> Reporter: Xing Lin
> Priority: Minor
> Labels: pull-request-available
>
> In RBF, trash files are moved to trash root under user's home dir at the
> corresponding namespace/namenode where the files reside. This was added in
> HDFS-16024. When the user home dir is not created before-hand at a namenode,
> we run into permission denied exceptions when trying to create the parent dir
> for the trash file before moving the file into it. We propose to enhance
> Router, to auto-create a user home's dir at the namenode for trash paths,
> using router's identity (which is assumed to be a super-user).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]