umamaheswararao commented on a change in pull request #2107:
URL: https://github.com/apache/hadoop/pull/2107#discussion_r448050744
##########
File path:
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFsLinkFallback.java
##########
@@ -294,4 +298,155 @@ public void
testMkdirShouldFailWhenFallbackFSNotAvailable()
assertTrue(fsTarget.exists(test));
}
+ /**
+ * Tests that the create file should be successful when the parent directory
+ * is same as the existent fallback directory. The new file should be created
+ * in fallback.
+ */
+ @Test
+ public void testCreateFileOnInternalMountDirWithSameDirTreeExistInFallback()
+ throws Exception {
+ Configuration conf = new Configuration();
+ ConfigUtil.addLink(conf, "/user1/hive/warehouse/partition-0",
+ new Path(targetTestRoot.toString()).toUri());
+ Path dir1 = new Path(targetTestRoot,
+ "fallbackDir/user1/hive/warehouse/partition-0");
+ fsTarget.mkdirs(dir1);
+ Path fallbackTarget = new Path(targetTestRoot, "fallbackDir");
+ ConfigUtil.addLinkFallback(conf, fallbackTarget.toUri());
+
+ AbstractFileSystem vfs =
+ AbstractFileSystem.get(viewFsDefaultClusterUri, conf);
+ Path p = new Path("/user1/hive/warehouse/test.file");
+ Path test = Path.mergePaths(fallbackTarget, p);
+ assertFalse(fsTarget.exists(test));
+ assertTrue(fsTarget.exists(test.getParent()));
+ vfs.create(p, EnumSet.of(CREATE),
+ Options.CreateOpts.perms(FsPermission.getDefault()));
+ assertTrue(fsTarget.exists(test));
+
+ }
+
+ /**
+ * Tests the making of a new directory which is not matching to any of
+ * internal directory.
+ */
+ @Test
+ public void testCreateNewFileWithOutMatchingToMountDirOrFallbackDirPath()
+ throws Exception {
+ Configuration conf = new Configuration();
+ ConfigUtil.addLink(conf, "/user1/hive/warehouse/partition-0",
+ new Path(targetTestRoot.toString()).toUri());
+ Path fallbackTarget = new Path(targetTestRoot, "fallbackDir");
+ fsTarget.mkdirs(fallbackTarget);
+ ConfigUtil.addLinkFallback(conf, fallbackTarget.toUri());
+ AbstractFileSystem vfs =
+ AbstractFileSystem.get(viewFsDefaultClusterUri, conf);
+ Path p = new Path("/user2/test.file");
+ Path test = Path.mergePaths(fallbackTarget, p);
+ assertFalse(fsTarget.exists(test));
+ // user2 does not exist in fallback
+ assertFalse(fsTarget.exists(test.getParent()));
+ vfs.create(p, EnumSet.of(CREATE),
+ Options.CreateOpts.perms(FsPermission.getDefault()),
+ Options.CreateOpts.createParent());
+ // /user2/test.file should be created in fallback
+ assertTrue(fsTarget.exists(test));
+ }
+
+ /**
+ * Tests the making of a new file on root which is not matching to any of
+ * fallback files on root.
+ */
+ @Test
+ public void testCreateFileOnRootWithFallbackEnabled()
+ throws Exception {
+ Configuration conf = new Configuration();
+ Path fallbackTarget = new Path(targetTestRoot, "fallbackDir");
+ fsTarget.mkdirs(fallbackTarget);
+
+ ConfigUtil.addLink(conf, "/user1/hive/",
+ new Path(targetTestRoot.toString()).toUri());
+ ConfigUtil.addLinkFallback(conf, fallbackTarget.toUri());
+
+ AbstractFileSystem vfs =
+ AbstractFileSystem.get(viewFsDefaultClusterUri, conf);
+ Path p = new Path("/test.file");
+ Path test = Path.mergePaths(fallbackTarget, p);
+ assertFalse(fsTarget.exists(test));
+ vfs.create(p, EnumSet.of(CREATE),
+ Options.CreateOpts.perms(FsPermission.getDefault()));
+ // /test.file should be created in fallback
+ assertTrue(fsTarget.exists(test));
+
+ }
+
+ /**
+ * Tests the create of a file on root where the path is matching to an
+ * existing file on fallback's file on root.
+ */
+ @Test (expected = FileAlreadyExistsException.class)
+ public void testCreateFileOnRootWithFallbackWithFileAlreadyExist()
+ throws Exception {
+ Configuration conf = new Configuration();
+ Path fallbackTarget = new Path(targetTestRoot, "fallbackDir");
+ Path testFile = new Path(fallbackTarget, "test.file");
+ // pre-creating test file in fallback.
+ fsTarget.createNewFile(testFile);
+
+ ConfigUtil.addLink(conf, "/user1/hive/",
+ new Path(targetTestRoot.toString()).toUri());
+ ConfigUtil.addLinkFallback(conf, fallbackTarget.toUri());
+
+ AbstractFileSystem vfs =
+ AbstractFileSystem.get(viewFsDefaultClusterUri, conf);
+ Path p = new Path("/test.file");
+ assertTrue(fsTarget.exists(testFile));
+ vfs.create(p, EnumSet.of(CREATE),
+ Options.CreateOpts.perms(FsPermission.getDefault()));
+ }
+
+ /**
+ * Tests the creating of a file where the path is same as mount link path.
+ */
+ @Test(expected= FileAlreadyExistsException.class)
+ public void testCreateFileWhereThePathIsSameAsItsMountLinkPath()
+ throws Exception {
+ Configuration conf = new Configuration();
+ Path fallbackTarget = new Path(targetTestRoot, "fallbackDir");
+ fsTarget.mkdirs(fallbackTarget);
+
+ ConfigUtil.addLink(conf, "/user1/hive/",
+ new Path(targetTestRoot.toString()).toUri());
+ ConfigUtil.addLinkFallback(conf, fallbackTarget.toUri());
+
+ AbstractFileSystem vfs =
+ AbstractFileSystem.get(viewFsDefaultClusterUri, conf);
+ Path p = new Path("/user1/hive");
+ assertFalse(fsTarget.exists(Path.mergePaths(fallbackTarget, p)));
+ vfs.create(p, EnumSet.of(CREATE),
+ Options.CreateOpts.perms(FsPermission.getDefault()));
+ }
+
+ /**
+ * Tests the create of a file where he path is same as one of of the internal
Review comment:
Done.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]