Search in sources :

Example 1 with RenameContext

use of alluxio.master.file.contexts.RenameContext in project alluxio by Alluxio.

the class FileSystemMasterFaultToleranceIntegrationTest method partitionTolerantRename.

@Test
public void partitionTolerantRename() throws Exception {
    // Create paths for the test.
    AlluxioURI testPath1 = new AlluxioURI("/testPath1");
    AlluxioURI testPath2 = new AlluxioURI("/testPath2");
    // Create context1 with unique operation id.
    RenameContext context = RenameContext.mergeFrom(RenamePOptions.newBuilder().setCommonOptions(FileSystemMasterCommonPOptions.newBuilder().setOperationId(new OperationId(UUID.randomUUID()).toFsProto())));
    // Create context2 with unique operation id.
    RenameContext context2 = RenameContext.mergeFrom(RenamePOptions.newBuilder().setCommonOptions(FileSystemMasterCommonPOptions.newBuilder().setOperationId(new OperationId(UUID.randomUUID()).toFsProto())));
    // Run partition tolerance test on leading master.
    {
        // Acquire file-system-master of leading master.
        FileSystemMaster leadingFsMaster = mMultiMasterLocalAlluxioCluster.getLocalAlluxioMaster().getMasterProcess().getMaster(FileSystemMaster.class);
        // Create the path to rename.
        leadingFsMaster.createDirectory(testPath1, CreateDirectoryContext.defaults());
        // Rename the path the first time.
        leadingFsMaster.rename(testPath1, testPath2, context);
        // Renaming the path the second time with the same context.
        // It should just return successfully.
        leadingFsMaster.rename(testPath1, testPath2, context);
        // Rename the path again with a different context.
        // It should fail with `FileDoesNotExistException`.
        assertThrows(FileDoesNotExistException.class, () -> leadingFsMaster.rename(testPath1, testPath2, context2));
    }
    // Promote standby to be a leader and reset test state.
    mMultiMasterLocalAlluxioCluster.stopLeader();
    mMultiMasterLocalAlluxioCluster.waitForNewMaster(CLUSTER_WAIT_TIMEOUT_MS);
    mAuthenticatedUser.resetUser();
    // Run partition tolerance test on the *new* leading master.
    {
        // Acquire file-system-master of leading master.
        FileSystemMaster leadingFsMaster = mMultiMasterLocalAlluxioCluster.getLocalAlluxioMaster().getMasterProcess().getMaster(FileSystemMaster.class);
        // Renaming the path on the new leader with the original operation-id should succeed.
        leadingFsMaster.rename(testPath1, testPath2, context);
        // Renaming on the new leader with a different operation-id.
        // It should fail with `FileDoesNotExistException`.
        assertThrows(FileDoesNotExistException.class, () -> leadingFsMaster.rename(testPath1, testPath2, context2));
    }
}
Also used : RenameContext(alluxio.master.file.contexts.RenameContext) FileDoesNotExistException(alluxio.exception.FileDoesNotExistException) OperationId(alluxio.wire.OperationId) FileSystemMaster(alluxio.master.file.FileSystemMaster) AlluxioURI(alluxio.AlluxioURI) BaseIntegrationTest(alluxio.testutils.BaseIntegrationTest) Test(org.junit.Test)

Aggregations

AlluxioURI (alluxio.AlluxioURI)1 FileDoesNotExistException (alluxio.exception.FileDoesNotExistException)1 FileSystemMaster (alluxio.master.file.FileSystemMaster)1 RenameContext (alluxio.master.file.contexts.RenameContext)1 BaseIntegrationTest (alluxio.testutils.BaseIntegrationTest)1 OperationId (alluxio.wire.OperationId)1 Test (org.junit.Test)1