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));
}
}
Aggregations