@Test public void deleteDirectoryWithDirectoriesTest2() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); mFsMaster.createDirectory( new AlluxioURI("/testFolder/testFolder2"), CreateDirectoryOptions.defaults()); long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile"), CreateFileOptions.defaults()); long fileId2 = mFsMaster.createFile( new AlluxioURI("/testFolder/testFolder2/testFile2"), CreateFileOptions.defaults()); Assert.assertEquals(1, mFsMaster.getFileId(new AlluxioURI("/testFolder"))); Assert.assertEquals(2, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2"))); Assert.assertEquals(fileId, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile"))); Assert.assertEquals( fileId2, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2/testFile2"))); try { mFsMaster.delete(new AlluxioURI("/testFolder/testFolder2"), false); Assert.fail("Deleting a nonempty directory nonrecursively should fail"); } catch (DirectoryNotEmptyException e) { Assert.assertEquals( ExceptionMessage.DELETE_NONEMPTY_DIRECTORY_NONRECURSIVE.getMessage("testFolder2"), e.getMessage()); } Assert.assertEquals(1, mFsMaster.getFileId(new AlluxioURI("/testFolder"))); Assert.assertEquals(2, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2"))); Assert.assertEquals(fileId, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile"))); Assert.assertEquals( fileId2, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2/testFile2"))); }
@Test public void renameExistingDstTest() throws Exception { mFsMaster.createFile(new AlluxioURI("/testFile1"), CreateFileOptions.defaults()); mFsMaster.createFile(new AlluxioURI("/testFile2"), CreateFileOptions.defaults()); try { mFsMaster.rename(new AlluxioURI("/testFile1"), new AlluxioURI("/testFile2")); Assert.fail("Should not be able to rename to an existing file"); } catch (Exception e) { // expected } }
@Test public void deleteFileTest() throws Exception { long fileId = mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults()); Assert.assertEquals(fileId, mFsMaster.getFileId(new AlluxioURI("/testFile"))); mFsMaster.delete(new AlluxioURI("/testFile"), true); Assert.assertEquals(IdUtils.INVALID_FILE_ID, mFsMaster.getFileId(new AlluxioURI("/testFile"))); }
@Test public void listFilesTest() throws Exception { CreateFileOptions options = CreateFileOptions.defaults().setBlockSizeBytes(64); HashSet<Long> ids = new HashSet<Long>(); HashSet<Long> dirIds = new HashSet<Long>(); for (int i = 0; i < 10; i++) { AlluxioURI dir = new AlluxioURI("/i" + i); mFsMaster.createDirectory(dir, CreateDirectoryOptions.defaults()); dirIds.add(mFsMaster.getFileId(dir)); for (int j = 0; j < 10; j++) { ids.add(mFsMaster.createFile(dir.join("j" + j), options)); } } HashSet<Long> listedIds = new HashSet<>(); HashSet<Long> listedDirIds = new HashSet<>(); List<FileInfo> infoList = mFsMaster.getFileInfoList(new AlluxioURI("/"), true); for (FileInfo info : infoList) { long id = info.getFileId(); listedDirIds.add(id); for (FileInfo fileInfo : mFsMaster.getFileInfoList(new AlluxioURI(info.getPath()), true)) { listedIds.add(fileInfo.getFileId()); } } Assert.assertEquals(ids, listedIds); Assert.assertEquals(dirIds, listedDirIds); }
@Test public void createFileTest() throws Exception { mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults()); FileInfo fileInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFile"))); Assert.assertFalse(fileInfo.isFolder()); Assert.assertEquals("", fileInfo.getUserName()); Assert.assertEquals(0644, (short) fileInfo.getPermission()); }
@Test public void lastModificationTimeCompleteFileTest() throws Exception { long fileId = mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults()); long opTimeMs = TEST_CURRENT_TIME; try (LockedInodePath inodePath = mInodeTree.lockFullInodePath(new AlluxioURI("/testFile"), InodeTree.LockMode.WRITE)) { mFsMaster.completeFileInternal(new ArrayList<Long>(), inodePath, 0, opTimeMs); } FileInfo fileInfo = mFsMaster.getFileInfo(fileId); Assert.assertEquals(opTimeMs, fileInfo.getLastModificationTimeMs()); }
@Test public void deleteDirectoryWithDirectoriesTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); mFsMaster.createDirectory( new AlluxioURI("/testFolder/testFolder2"), CreateDirectoryOptions.defaults()); long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile"), CreateFileOptions.defaults()); long fileId2 = mFsMaster.createFile( new AlluxioURI("/testFolder/testFolder2/testFile2"), CreateFileOptions.defaults()); Assert.assertEquals(1, mFsMaster.getFileId(new AlluxioURI("/testFolder"))); Assert.assertEquals(2, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2"))); Assert.assertEquals(fileId, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile"))); Assert.assertEquals( fileId2, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2/testFile2"))); mFsMaster.delete(new AlluxioURI("/testFolder"), true); Assert.assertEquals( IdUtils.INVALID_FILE_ID, mFsMaster.getFileId(new AlluxioURI("/testFolder/testFolder2/testFile2"))); }
/** Tests that deleting a file from a folder updates the folder's last modification time. */ @Test public void lastModificationTimeDeleteTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); mFsMaster.createFile(new AlluxioURI("/testFolder/testFile"), CreateFileOptions.defaults()); long folderId = mFsMaster.getFileId(new AlluxioURI("/testFolder")); long modificationTimeBeforeDelete = mFsMaster.getFileInfo(folderId).getLastModificationTimeMs(); CommonUtils.sleepMs(2); mFsMaster.delete(new AlluxioURI("/testFolder/testFile"), true); long modificationTimeAfterDelete = mFsMaster.getFileInfo(folderId).getLastModificationTimeMs(); Assert.assertTrue(modificationTimeBeforeDelete < modificationTimeAfterDelete); }
@Test public void lastModificationTimeCreateFileTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); long opTimeMs = TEST_CURRENT_TIME; CreateFileOptions options = CreateFileOptions.defaults().setOperationTimeMs(opTimeMs); try (LockedInodePath inodePath = mInodeTree.lockInodePath( new AlluxioURI("/testFolder/testFile"), InodeTree.LockMode.WRITE)) { mFsMaster.createFileInternal(inodePath, options); } FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder"))); Assert.assertEquals(opTimeMs, folderInfo.getLastModificationTimeMs()); }
@Test public void renameToDeeper() throws Exception { CreateFileOptions createFileOptions = CreateFileOptions.defaults().setRecursive(true); CreateDirectoryOptions createDirectoryOptions = CreateDirectoryOptions.defaults().setRecursive(true); mThrown.expect(InvalidPathException.class); mFsMaster.createDirectory(new AlluxioURI("/testDir1/testDir2"), createDirectoryOptions); mFsMaster.createFile( new AlluxioURI("/testDir1/testDir2/testDir3/testFile3"), createFileOptions); mFsMaster.rename( new AlluxioURI("/testDir1/testDir2"), new AlluxioURI("/testDir1/testDir2/testDir3/testDir4")); }
@Test public void ttlCreateFileTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); long ttl = 100; CreateFileOptions options = CreateFileOptions.defaults().setTtl(ttl); try (LockedInodePath inodePath = mInodeTree.lockInodePath( new AlluxioURI("/testFolder/testFile"), InodeTree.LockMode.WRITE)) { mFsMaster.createFileInternal(inodePath, options); } FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile"))); Assert.assertEquals(ttl, folderInfo.getTtl()); }
@Test public void clientFileInfoEmptyFileTest() throws Exception { long fileId = mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults()); FileInfo fileInfo = mFsMaster.getFileInfo(fileId); Assert.assertEquals("testFile", fileInfo.getName()); Assert.assertEquals(fileId, fileInfo.getFileId()); Assert.assertEquals(0, fileInfo.getLength()); Assert.assertTrue(fileInfo.isCacheable()); Assert.assertFalse(fileInfo.isCompleted()); Assert.assertFalse(fileInfo.isFolder()); Assert.assertFalse(fileInfo.isPersisted()); Assert.assertFalse(fileInfo.isPinned()); Assert.assertEquals(Constants.NO_TTL, fileInfo.getTtl()); Assert.assertEquals("", fileInfo.getUserName()); Assert.assertEquals(0644, (short) fileInfo.getPermission()); }
@Test public void lsTest() throws Exception { CreateFileOptions options = CreateFileOptions.defaults().setBlockSizeBytes(64); for (int i = 0; i < 10; i++) { mFsMaster.createDirectory(new AlluxioURI("/i" + i), CreateDirectoryOptions.defaults()); for (int j = 0; j < 10; j++) { mFsMaster.createFile(new AlluxioURI("/i" + i + "/j" + j), options); } } Assert.assertEquals(1, mFsMaster.getFileInfoList(new AlluxioURI("/i0/j0"), true).size()); for (int i = 0; i < 10; i++) { Assert.assertEquals(10, mFsMaster.getFileInfoList(new AlluxioURI("/i" + i), true).size()); } Assert.assertEquals(10, mFsMaster.getFileInfoList(new AlluxioURI("/"), true).size()); }
public void exec(int depth, int concurrencyDepth, AlluxioURI path) throws Exception { if (depth < 1) { return; } else if (depth == 1) { long fileId = mFsMaster.createFile(path, CreateFileOptions.defaults()); Assert.assertEquals(fileId, mFsMaster.getFileId(path)); // verify the user permission for file FileInfo fileInfo = mFsMaster.getFileInfo(fileId); Assert.assertEquals("", fileInfo.getUserName()); Assert.assertEquals(0644, (short) fileInfo.getPermission()); } else { mFsMaster.createDirectory(path, CreateDirectoryOptions.defaults()); Assert.assertNotNull(mFsMaster.getFileId(path)); long dirId = mFsMaster.getFileId(path); Assert.assertNotEquals(-1, dirId); FileInfo dirInfo = mFsMaster.getFileInfo(dirId); Assert.assertEquals("", dirInfo.getUserName()); Assert.assertEquals(0755, (short) dirInfo.getPermission()); } if (concurrencyDepth > 0) { ExecutorService executor = Executors.newCachedThreadPool(); try { ArrayList<Future<Void>> futures = new ArrayList<Future<Void>>(FILES_PER_NODE); for (int i = 0; i < FILES_PER_NODE; i++) { Callable<Void> call = (new ConcurrentCreator( depth - 1, concurrencyDepth - 1, path.join(Integer.toString(i)))); futures.add(executor.submit(call)); } for (Future<Void> f : futures) { f.get(); } } finally { executor.shutdown(); } } else { for (int i = 0; i < FILES_PER_NODE; i++) { exec(depth - 1, concurrencyDepth, path.join(Integer.toString(i))); } } }
@Test public void ttlExpiredCreateFileTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); long ttl = 1; CreateFileOptions options = CreateFileOptions.defaults().setTtl(ttl); long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile1"), options); FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile1"))); Assert.assertEquals(fileId, folderInfo.getFileId()); Assert.assertEquals(ttl, folderInfo.getTtl()); // Sleep for the ttl expiration. CommonUtils.sleepMs(2 * TTL_CHECKER_INTERVAL_MS); Assert.assertTrue( HeartbeatScheduler.await(HeartbeatContext.MASTER_TTL_CHECK, 10, TimeUnit.SECONDS)); HeartbeatScheduler.schedule(HeartbeatContext.MASTER_TTL_CHECK); Assert.assertTrue( HeartbeatScheduler.await(HeartbeatContext.MASTER_TTL_CHECK, 10, TimeUnit.SECONDS)); mThrown.expect(FileDoesNotExistException.class); mFsMaster.getFileInfo(fileId); }
@Test public void lastModificationTimeRenameTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile1"), CreateFileOptions.defaults()); long opTimeMs = TEST_CURRENT_TIME; try (InodePathPair inodePathPair = mInodeTree.lockInodePathPair( new AlluxioURI("/testFolder/testFile1"), InodeTree.LockMode.WRITE_PARENT, new AlluxioURI("/testFolder/testFile2"), InodeTree.LockMode.WRITE)) { LockedInodePath srcPath = inodePathPair.getFirst(); LockedInodePath dstPath = inodePathPair.getSecond(); mFsMaster.renameInternal(srcPath, dstPath, true, opTimeMs); } FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder"))); Assert.assertEquals(opTimeMs, folderInfo.getLastModificationTimeMs()); }
@Test public void ttlRenameTest() throws Exception { mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults()); long ttl = 1; CreateFileOptions options = CreateFileOptions.defaults().setTtl(ttl); long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile1"), options); try (InodePathPair inodePathPair = mInodeTree.lockInodePathPair( new AlluxioURI("/testFolder/testFile1"), InodeTree.LockMode.WRITE_PARENT, new AlluxioURI("/testFolder/testFile2"), InodeTree.LockMode.WRITE)) { LockedInodePath srcPath = inodePathPair.getFirst(); LockedInodePath dstPath = inodePathPair.getSecond(); mFsMaster.renameInternal(srcPath, dstPath, true, TEST_CURRENT_TIME); } FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile2"))); Assert.assertEquals(ttl, folderInfo.getTtl()); }
@Test public void createFileInvalidPathTest2() throws Exception { mThrown.expect(FileAlreadyExistsException.class); mFsMaster.createFile(new AlluxioURI("/"), CreateFileOptions.defaults()); }
@Test public void createFileInvalidPathTest3() throws Exception { mThrown.expect(InvalidPathException.class); mFsMaster.createFile(new AlluxioURI("/testFile1"), CreateFileOptions.defaults()); mFsMaster.createFile(new AlluxioURI("/testFile1/testFile2"), CreateFileOptions.defaults()); }
@Test public void renameNonexistentTest() throws Exception { mFsMaster.createFile(new AlluxioURI("/testFile1"), CreateFileOptions.defaults()); Assert.assertEquals(IdUtils.INVALID_FILE_ID, mFsMaster.getFileId(new AlluxioURI("/testFile2"))); }
@Test public void createAlreadyExistFileTest() throws Exception { mThrown.expect(FileAlreadyExistsException.class); mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults()); mFsMaster.createDirectory(new AlluxioURI("/testFile"), CreateDirectoryOptions.defaults()); }