use of alluxio.master.MasterProcess in project alluxio by Alluxio.
the class BackupCommandStateLockingIntegrationTest method timeoutWhenStateLockAcquired.
@Test
public void timeoutWhenStateLockAcquired() throws Exception {
// Grab the master state-lock-manager via reflection.
MasterProcess masterProcess = Whitebox.getInternalState(mLocalAlluxioCluster.getLocalAlluxioMaster(), "mMasterProcess");
MasterContext masterCtx = Whitebox.getInternalState(masterProcess, "mContext");
StateLockManager stateLockManager = masterCtx.getStateLockManager();
// Lock the state-change lock on the master before initiating the backup.
try (LockResource lr = stateLockManager.lockExclusive(StateLockOptions.defaults())) {
// Prepare for a backup.
Path dir = Paths.get(ServerConfiguration.getString(PropertyKey.MASTER_BACKUP_DIRECTORY));
Files.createDirectories(dir);
assertEquals(0, Files.list(dir).count());
// Initiate backup. It should fail.
int errCode = mFsAdminShell.run("backup");
assertTrue(mOutput.toString().contains(ExceptionMessage.STATE_LOCK_TIMED_OUT.getMessage(3000)));
assertNotEquals(0, errCode);
}
}
use of alluxio.master.MasterProcess in project alluxio by Alluxio.
the class FileInStreamRehydrationIntegrationTest method testRehydration.
@Test
public void testRehydration() throws Exception {
FileSystem fs = FileSystem.Factory.create(ServerConfiguration.global());
// Create a file with 10 blocks.
AlluxioURI filePath = new AlluxioURI(PathUtils.uniqPath());
CreateFilePOptions op = CreateFilePOptions.newBuilder().setWriteType(WritePType.CACHE_THROUGH).setRecursive(true).build();
byte[] content = generateContent(BLOCK_BYTES * 10);
try (FileOutStream os = fs.createFile(filePath, op)) {
os.write(content);
}
// Validate file size and content.
validateAndCloseFileStream(mFileSystem.openFile(filePath), content);
// Grab the block master for emulating lost blocks.
MasterProcess masterProcess = Whitebox.getInternalState(mLocalAlluxioClusterResource.get().getLocalAlluxioMaster(), "mMasterProcess");
BlockMaster blockMaster = masterProcess.getMaster(BlockMaster.class);
// Remove blocks externally from block-master.
URIStatus status = fs.getStatus(filePath);
blockMaster.removeBlocks(status.getBlockIds(), true);
// Validate file size and content.
validateAndCloseFileStream(mFileSystem.openFile(filePath), content);
}
use of alluxio.master.MasterProcess in project alluxio by Alluxio.
the class BackupCommandStateLockingIntegrationTest method takeBackupDuringExclusiveOnlyPhase.
@Test
public void takeBackupDuringExclusiveOnlyPhase() throws Exception {
// Grab the master state-lock-manager via reflection.
MasterProcess masterProcess = Whitebox.getInternalState(mLocalAlluxioCluster.getLocalAlluxioMaster(), "mMasterProcess");
MasterContext masterCtx = Whitebox.getInternalState(masterProcess, "mContext");
StateLockManager stateLockManager = masterCtx.getStateLockManager();
// Activate exclusive-only phase via reflection.
// Cannot make via cluster property due to lack of support from test utilities.
long exclusiveOnlyDurationMs = 30000;
Whitebox.setInternalState(stateLockManager, "mExclusiveOnlyDeadlineMs", System.currentTimeMillis() + exclusiveOnlyDurationMs);
try {
// getStatus() should fail during exclusive-only phase.
mException.expect(AlluxioException.class);
mLocalAlluxioCluster.getClient().getStatus(new AlluxioURI("/"));
// Prepare for a backup.
Path dir = Paths.get(ServerConfiguration.getString(PropertyKey.MASTER_BACKUP_DIRECTORY));
Files.createDirectories(dir);
assertEquals(0, Files.list(dir).count());
// Take the backup. It should be allowed.
int errCode = mFsAdminShell.run("backup");
assertEquals("", mErrOutput.toString());
assertEquals(0, errCode);
assertEquals(1, Files.list(dir).count());
} finally {
// Reset exclusive-only phase.
Whitebox.setInternalState(stateLockManager, "mExclusiveOnlyDeadlineMs", -1);
}
}
Aggregations